window.Promise || function() {
	"use strict";

	function t(t) {
		return "function" == typeof t || "object" == typeof t && null !== t
	}

	function e(t) {
		return "function" == typeof t
	}

	function n(t) {
		return "object" == typeof t && null !== t
	}

	function r(t, e) {
		V[z] = t, V[z + 1] = e, z += 2, 2 === z && (U ? U(f) : W())
	}

	function o(t) {
		U = t
	}

	function i() {
		var t = process.nextTick,
			e = process.versions.node.match(/^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/);
		return Array.isArray(e) && "0" === e[1] && "10" === e[2] && (t = setImmediate),
			function() {
				t(f)
			}
	}

	function u() {
		return function() {
			N(f)
		}
	}

	function s() {
		var t = 0,
			e = new J(f),
			n = document.createTextNode("");
		return e.observe(n, {
				characterData: !0
			}),
			function() {
				n.data = t = ++t % 2
			}
	}

	function c() {
		var t = new MessageChannel;
		return t.port1.onmessage = f,
			function() {
				t.port2.postMessage(0)
			}
	}

	function a() {
		return function() {
			setTimeout(f, 1)
		}
	}

	function f() {
		for(var t = 0; z > t; t += 2) {
			var e = V[t],
				n = V[t + 1];
			e(n), V[t] = void 0, V[t + 1] = void 0
		}
		z = 0
	}

	function l() {
		try {
			var t = require,
				e = t("vertx");
			return N = e.runOnLoop || e.runOnContext, u()
		} catch(n) {
			return a()
		}
	}

	function p() {}

	function _() {
		return new TypeError("You cannot resolve a promise with itself")
	}

	function h() {
		return new TypeError("A promises callback cannot return that same promise.")
	}

	function d(t) {
		try {
			return t.then
		} catch(e) {
			return ee.error = e, ee
		}
	}

	function v(t, e, n, r) {
		try {
			t.call(e, n, r)
		} catch(o) {
			return o
		}
	}

	function y(t, e, n) {
		B(function(t) {
			var r = !1,
				o = v(n, e, function(n) {
					r || (r = !0, e !== n ? w(t, n) : A(t, n))
				}, function(e) {
					r || (r = !0, E(t, e))
				}, "Settle: " + (t._label || " unknown promise"));
			!r && o && (r = !0, E(t, o))
		}, t)
	}

	function m(t, e) {
		e._state === Z ? A(t, e._result) : e._state === te ? E(t, e._result) : j(e, void 0, function(e) {
			w(t, e)
		}, function(e) {
			E(t, e)
		})
	}

	function b(t, n) {
		if(n.constructor === t.constructor) m(t, n);
		else {
			var r = d(n);
			r === ee ? E(t, ee.error) : void 0 === r ? A(t, n) : e(r) ? y(t, n, r) : A(t, n)
		}
	}

	function w(e, n) {
		e === n ? E(e, _()) : t(n) ? b(e, n) : A(e, n)
	}

	function g(t) {
		t._onerror && t._onerror(t._result), S(t)
	}

	function A(t, e) {
		t._state === X && (t._result = e, t._state = Z, 0 !== t._subscribers.length && B(S, t))
	}

	function E(t, e) {
		t._state === X && (t._state = te, t._result = e, B(g, t))
	}

	function j(t, e, n, r) {
		var o = t._subscribers,
			i = o.length;
		t._onerror = null, o[i] = e, o[i + Z] = n, o[i + te] = r, 0 === i && t._state && B(S, t)
	}

	function S(t) {
		var e = t._subscribers,
			n = t._state;
		if(0 !== e.length) {
			for(var r, o, i = t._result, u = 0; u < e.length; u += 3) r = e[u], o = e[u + n], r ? x(n, r, o, i) : o(i);
			t._subscribers.length = 0
		}
	}

	function P() {
		this.error = null
	}

	function T(t, e) {
		try {
			return t(e)
		} catch(n) {
			return ne.error = n, ne
		}
	}

	function x(t, n, r, o) {
		var i, u, s, c, a = e(r);
		if(a) {
			if(i = T(r, o), i === ne ? (c = !0, u = i.error, i = null) : s = !0, n === i) return E(n, h()), void 0
		} else i = o, s = !0;
		n._state !== X || (a && s ? w(n, i) : c ? E(n, u) : t === Z ? A(n, i) : t === te && E(n, i))
	}

	function C(t, e) {
		try {
			e(function(e) {
				w(t, e)
			}, function(e) {
				E(t, e)
			})
		} catch(n) {
			E(t, n)
		}
	}

	function M(t, e) {
		var n = this;
		n._instanceConstructor = t, n.promise = new t(p), n._validateInput(e) ? (n._input = e, n.length = e.length, n._remaining = e.length, n._init(), 0 === n.length ? A(n.promise, n._result) : (n.length = n.length || 0, n._enumerate(), 0 === n._remaining && A(n.promise, n._result))) : E(n.promise, n._validationError())
	}

	function O(t) {
		return new re(this, t).promise
	}

	function k(t) {
		function e(t) {
			w(o, t)
		}

		function n(t) {
			E(o, t)
		}
		var r = this,
			o = new r(p);
		if(!$(t)) return E(o, new TypeError("You must pass an array to race.")), o;
		for(var i = t.length, u = 0; o._state === X && i > u; u++) j(r.resolve(t[u]), void 0, e, n);
		return o
	}

	function I(t) {
		var e = this;
		if(t && "object" == typeof t && t.constructor === e) return t;
		var n = new e(p);
		return w(n, t), n
	}

	function Y(t) {
		var e = this,
			n = new e(p);
		return E(n, t), n
	}

	function q() {
		throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")
	}

	function F() {
		throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")
	}

	function D(t) {
		this._id = ce++, this._state = void 0, this._result = void 0, this._subscribers = [], p !== t && (e(t) || q(), this instanceof D || F(), C(this, t))
	}

	function K() {
		var t;
		if("undefined" != typeof global) t = global;
		else if("undefined" != typeof self) t = self;
		else try {
			t = Function("return this")()
		} catch(e) {
			throw new Error("polyfill failed because global object is unavailable in this environment")
		}
		var n = t.Promise;
		(!n || "[object Promise]" !== Object.prototype.toString.call(n.resolve()) || n.cast) && (t.Promise = ae)
	}
	var L;
	L = Array.isArray ? Array.isArray : function(t) {
		return "[object Array]" === Object.prototype.toString.call(t)
	};
	var N, U, W, $ = L,
		z = 0,
		B = ({}.toString, r),
		G = "undefined" != typeof window ? window : void 0,
		H = G || {},
		J = H.MutationObserver || H.WebKitMutationObserver,
		Q = "undefined" != typeof process && "[object process]" === {}.toString.call(process),
		R = "undefined" != typeof Uint8ClampedArray && "undefined" != typeof importScripts && "undefined" != typeof MessageChannel,
		V = new Array(1e3);
	W = Q ? i() : J ? s() : R ? c() : void 0 === G && "function" == typeof require ? l() : a();
	var X = void 0,
		Z = 1,
		te = 2,
		ee = new P,
		ne = new P;
	M.prototype._validateInput = function(t) {
		return $(t)
	}, M.prototype._validationError = function() {
		return new Error("Array Methods must be provided an Array")
	}, M.prototype._init = function() {
		this._result = new Array(this.length)
	};
	var re = M;
	M.prototype._enumerate = function() {
		for(var t = this, e = t.length, n = t.promise, r = t._input, o = 0; n._state === X && e > o; o++) t._eachEntry(r[o], o)
	}, M.prototype._eachEntry = function(t, e) {
		var r = this,
			o = r._instanceConstructor;
		n(t) ? t.constructor === o && t._state !== X ? (t._onerror = null, r._settledAt(t._state, e, t._result)) : r._willSettleAt(o.resolve(t), e) : (r._remaining--, r._result[e] = t)
	}, M.prototype._settledAt = function(t, e, n) {
		var r = this,
			o = r.promise;
		o._state === X && (r._remaining--, t === te ? E(o, n) : r._result[e] = n), 0 === r._remaining && A(o, r._result)
	}, M.prototype._willSettleAt = function(t, e) {
		var n = this;
		j(t, void 0, function(t) {
			n._settledAt(Z, e, t)
		}, function(t) {
			n._settledAt(te, e, t)
		})
	};
	var oe = O,
		ie = k,
		ue = I,
		se = Y,
		ce = 0,
		ae = D;
	D.all = oe, D.race = ie, D.resolve = ue, D.reject = se, D._setScheduler = o, D._asap = B, D.prototype = {
		constructor: D,
		then: function(t, e) {
			var n = this,
				r = n._state;
			if(r === Z && !t || r === te && !e) return this;
			var o = new this.constructor(p),
				i = n._result;
			if(r) {
				var u = arguments[r - 1];
				B(function() {
					x(r, o, u, i)
				})
			} else j(n, o, t, e);
			return o
		},
		"catch": function(t) {
			return this.then(null, t)
		}
	};
	var fe = K,
		le = {
			Promise: ae,
			polyfill: fe
		};
	"function" == typeof define && define.amd ? define(function() {
		return le
	}) : "undefined" != typeof module && module.exports ? module.exports = le : "undefined" != typeof this && (this.ES6Promise = le), fe()
}.call(this);
window.Promise || ES6Promise.polyfill();
! function(e, t) {
	"object" == typeof exports ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : e.IPv6 = t(e)
}(this, function(e) {
	var t = e && e.IPv6;
	return {
		best: function(e) {
			e = e.toLowerCase().split(":");
			var t = e.length,
				r = 8;
			"" === e[0] && "" === e[1] && "" === e[2] ? (e.shift(), e.shift()) : "" === e[0] && "" === e[1] ? e.shift() : "" === e[t - 1] && "" === e[t - 2] && e.pop(), t = e.length, -1 !== e[t - 1].indexOf(".") && (r = 7);
			var n;
			for(n = 0; t > n && "" !== e[n]; n++);
			if(r > n)
				for(e.splice(n, 1, "0000"); e.length < r;) e.splice(n, 0, "0000");
			for(n = 0; r > n; n++) {
				for(var t = e[n].split(""), o = 0; 3 > o && ("0" === t[0] && 1 < t.length); o++) t.splice(0, 1);
				e[n] = t.join("")
			}
			var t = -1,
				a = o = 0,
				i = -1,
				s = !1;
			for(n = 0; r > n; n++) s ? "0" === e[n] ? a += 1 : (s = !1, a > o && (t = i, o = a)) : "0" === e[n] && (s = !0, i = n, a = 1);
			for(a > o && (t = i, o = a), o > 1 && e.splice(t, o, ""), t = e.length, r = "", "" === e[0] && (r = ":"), n = 0; t > n && (r += e[n], n !== t - 1); n++) r += ":";
			return "" === e[t - 1] && (r += ":"), r
		},
		noConflict: function() {
			return e.IPv6 === this && (e.IPv6 = t), this
		}
	}
}),
function(e) {
	function t(e) {
		throw RangeError(y[e])
	}

	function r(e, t) {
		for(var r = e.length; r--;) e[r] = t(e[r]);
		return e
	}

	function n(e, t) {
		return r(e.split(v), t).join(".")
	}

	function o(e) {
		for(var t, r, n = [], o = 0, a = e.length; a > o;) t = e.charCodeAt(o++), t >= 55296 && 56319 >= t && a > o ? (r = e.charCodeAt(o++), 56320 == (64512 & r) ? n.push(((1023 & t) << 10) + (1023 & r) + 65536) : (n.push(t), o--)) : n.push(t);
		return n
	}

	function a(e) {
		return r(e, function(e) {
			var t = "";
			return e > 65535 && (e -= 65536, t += _(e >>> 10 & 1023 | 55296), e = 56320 | 1023 & e), t += _(e)
		}).join("")
	}

	function i(e, t) {
		return e + 22 + 75 * (26 > e) - ((0 != t) << 5)
	}

	function s(e, t, r) {
		var n = 0;
		for(e = r ? b(e / 700) : e >> 1, e += b(e / t); e > 455; n += 36) e = b(e / 35);
		return b(n + 36 * e / (e + 38))
	}

	function u(e) {
		var r, n, o, i, u, c, p = [],
			h = e.length,
			l = 0,
			d = 128,
			m = 72;
		for(n = e.lastIndexOf("-"), 0 > n && (n = 0), o = 0; n > o; ++o) 128 <= e.charCodeAt(o) && t("not-basic"), p.push(e.charCodeAt(o));
		for(n = n > 0 ? n + 1 : 0; h > n;) {
			for(o = l, r = 1, i = 36; n >= h && t("invalid-input"), u = e.charCodeAt(n++), u = 10 > u - 48 ? u - 22 : 26 > u - 65 ? u - 65 : 26 > u - 97 ? u - 97 : 36, (u >= 36 || u > b((2147483647 - l) / r)) && t("overflow"), l += u * r, c = m >= i ? 1 : i >= m + 26 ? 26 : i - m, !(c > u); i += 36) u = 36 - c, r > b(2147483647 / u) && t("overflow"), r *= u;
			r = p.length + 1, m = s(l - o, r, 0 == o), b(l / r) > 2147483647 - d && t("overflow"), d += b(l / r), l %= r, p.splice(l++, 0, d)
		}
		return a(p)
	}

	function c(e) {
		var r, n, a, u, c, p, h, l, d, m, g, f, v = [];
		for(e = o(e), m = e.length, r = 128, n = 0, c = 72, p = 0; m > p; ++p) d = e[p], 128 > d && v.push(_(d));
		for((a = u = v.length) && v.push("-"); m > a;) {
			for(h = 2147483647, p = 0; m > p; ++p) d = e[p], d >= r && h > d && (h = d);
			for(g = a + 1, h - r > b((2147483647 - n) / g) && t("overflow"), n += (h - r) * g, r = h, p = 0; m > p; ++p)
				if(d = e[p], r > d && 2147483647 < ++n && t("overflow"), d == r) {
					for(l = n, h = 36; d = c >= h ? 1 : h >= c + 26 ? 26 : h - c, !(d > l); h += 36) f = l - d, l = 36 - d, v.push(_(i(d + f % l, 0))), l = b(f / l);
					v.push(_(i(l, 0))), c = s(n, g, a == u), n = 0, ++a
				}++n, ++r
		}
		return v.join("")
	}
	var p = "object" == typeof exports && exports,
		h = "object" == typeof module && module && module.exports == p && module,
		l = "object" == typeof global && global;
	(l.global === l || l.window === l) && (e = l);
	var d, m, g = /^xn--/,
		f = /[^ -~]/,
		v = /\x2E|\u3002|\uFF0E|\uFF61/g,
		y = {
			overflow: "Overflow: input needs wider integers to process",
			"not-basic": "Illegal input >= 0x80 (not a basic code point)",
			"invalid-input": "Invalid input"
		},
		b = Math.floor,
		_ = String.fromCharCode;
	if(d = {
			version: "1.2.3",
			ucs2: {
				decode: o,
				encode: a
			},
			decode: u,
			encode: c,
			toASCII: function(e) {
				return n(e, function(e) {
					return f.test(e) ? "xn--" + c(e) : e
				})
			},
			toUnicode: function(e) {
				return n(e, function(e) {
					return g.test(e) ? u(e.slice(4).toLowerCase()) : e
				})
			}
		}, "function" == typeof define && "object" == typeof define.amd && define.amd) define(function() {
		return d
	});
	else if(p && !p.nodeType)
		if(h) h.exports = d;
		else
			for(m in d) d.hasOwnProperty(m) && (p[m] = d[m]);
	else e.punycode = d
}(this),
function(e, t) {
	"object" == typeof exports ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : e.SecondLevelDomains = t(e)
}(this, function(e) {
	var t = e && e.SecondLevelDomains,
		r = {
			list: {
				ac: " com gov mil net org ",
				ae: " ac co gov mil name net org pro sch ",
				af: " com edu gov net org ",
				al: " com edu gov mil net org ",
				ao: " co ed gv it og pb ",
				ar: " com edu gob gov int mil net org tur ",
				at: " ac co gv or ",
				au: " asn com csiro edu gov id net org ",
				ba: " co com edu gov mil net org rs unbi unmo unsa untz unze ",
				bb: " biz co com edu gov info net org store tv ",
				bh: " biz cc com edu gov info net org ",
				bn: " com edu gov net org ",
				bo: " com edu gob gov int mil net org tv ",
				br: " adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ",
				bs: " com edu gov net org ",
				bz: " du et om ov rg ",
				ca: " ab bc mb nb nf nl ns nt nu on pe qc sk yk ",
				ck: " biz co edu gen gov info net org ",
				cn: " ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ",
				co: " com edu gov mil net nom org ",
				cr: " ac c co ed fi go or sa ",
				cy: " ac biz com ekloges gov ltd name net org parliament press pro tm ",
				"do": " art com edu gob gov mil net org sld web ",
				dz: " art asso com edu gov net org pol ",
				ec: " com edu fin gov info med mil net org pro ",
				eg: " com edu eun gov mil name net org sci ",
				er: " com edu gov ind mil net org rochest w ",
				es: " com edu gob nom org ",
				et: " biz com edu gov info name net org ",
				fj: " ac biz com info mil name net org pro ",
				fk: " ac co gov net nom org ",
				fr: " asso com f gouv nom prd presse tm ",
				gg: " co net org ",
				gh: " com edu gov mil org ",
				gn: " ac com gov net org ",
				gr: " com edu gov mil net org ",
				gt: " com edu gob ind mil net org ",
				gu: " com edu gov net org ",
				hk: " com edu gov idv net org ",
				hu: " 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ",
				id: " ac co go mil net or sch web ",
				il: " ac co gov idf k12 muni net org ",
				"in": " ac co edu ernet firm gen gov i ind mil net nic org res ",
				iq: " com edu gov i mil net org ",
				ir: " ac co dnssec gov i id net org sch ",
				it: " edu gov ",
				je: " co net org ",
				jo: " com edu gov mil name net org sch ",
				jp: " ac ad co ed go gr lg ne or ",
				ke: " ac co go info me mobi ne or sc ",
				kh: " com edu gov mil net org per ",
				ki: " biz com de edu gov info mob net org tel ",
				km: " asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ",
				kn: " edu gov net org ",
				kr: " ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ",
				kw: " com edu gov net org ",
				ky: " com edu gov net org ",
				kz: " com edu gov mil net org ",
				lb: " com edu gov net org ",
				lk: " assn com edu gov grp hotel int ltd net ngo org sch soc web ",
				lr: " com edu gov net org ",
				lv: " asn com conf edu gov id mil net org ",
				ly: " com edu gov id med net org plc sch ",
				ma: " ac co gov m net org press ",
				mc: " asso tm ",
				me: " ac co edu gov its net org priv ",
				mg: " com edu gov mil nom org prd tm ",
				mk: " com edu gov inf name net org pro ",
				ml: " com edu gov net org presse ",
				mn: " edu gov org ",
				mo: " com edu gov net org ",
				mt: " com edu gov net org ",
				mv: " aero biz com coop edu gov info int mil museum name net org pro ",
				mw: " ac co com coop edu gov int museum net org ",
				mx: " com edu gob net org ",
				my: " com edu gov mil name net org sch ",
				nf: " arts com firm info net other per rec store web ",
				ng: " biz com edu gov mil mobi name net org sch ",
				ni: " ac co com edu gob mil net nom org ",
				np: " com edu gov mil net org ",
				nr: " biz com edu gov info net org ",
				om: " ac biz co com edu gov med mil museum net org pro sch ",
				pe: " com edu gob mil net nom org sld ",
				ph: " com edu gov i mil net ngo org ",
				pk: " biz com edu fam gob gok gon gop gos gov net org web ",
				pl: " art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ",
				pr: " ac biz com edu est gov info isla name net org pro prof ",
				ps: " com edu gov net org plo sec ",
				pw: " belau co ed go ne or ",
				ro: " arts com firm info nom nt org rec store tm www ",
				rs: " ac co edu gov in org ",
				sb: " com edu gov net org ",
				sc: " com edu gov net org ",
				sh: " co com edu gov net nom org ",
				sl: " com edu gov net org ",
				st: " co com consulado edu embaixada gov mil net org principe saotome store ",
				sv: " com edu gob org red ",
				sz: " ac co org ",
				tr: " av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ",
				tt: " aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ",
				tw: " club com ebiz edu game gov idv mil net org ",
				mu: " ac co com gov net or org ",
				mz: " ac co edu gov org ",
				na: " co com ",
				nz: " ac co cri geek gen govt health iwi maori mil net org parliament school ",
				pa: " abo ac com edu gob ing med net nom org sld ",
				pt: " com edu gov int net nome org publ ",
				py: " com edu gov mil net org ",
				qa: " com edu gov mil net org ",
				re: " asso com nom ",
				ru: " ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ",
				rw: " ac co com edu gouv gov int mil net ",
				sa: " com edu gov med net org pub sch ",
				sd: " com edu gov info med net org tv ",
				se: " a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ",
				sg: " com edu gov idn net org per ",
				sn: " art com edu gouv org perso univ ",
				sy: " com edu gov mil net news org ",
				th: " ac co go in mi net or ",
				tj: " ac biz co com edu go gov info int mil name net nic org test web ",
				tn: " agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ",
				tz: " ac co go ne or ",
				ua: " biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ",
				ug: " ac co go ne or org sc ",
				uk: " ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ",
				us: " dni fed isa kids nsn ",
				uy: " com edu gub mil net org ",
				ve: " co com edu gob info mil net org web ",
				vi: " co com k12 net org ",
				vn: " ac biz com edu gov health info int name net org pro ",
				ye: " co com gov ltd me net org plc ",
				yu: " ac co edu gov org ",
				za: " ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ",
				zm: " ac co com edu gov net org sch "
			},
			has: function(e) {
				var t = e.lastIndexOf(".");
				if(0 >= t || t >= e.length - 1) return !1;
				var n = e.lastIndexOf(".", t - 1);
				if(0 >= n || n >= t - 1) return !1;
				var o = r.list[e.slice(t + 1)];
				return o ? 0 <= o.indexOf(" " + e.slice(n + 1, t) + " ") : !1
			},
			is: function(e) {
				var t = e.lastIndexOf(".");
				if(0 >= t || t >= e.length - 1 || 0 <= e.lastIndexOf(".", t - 1)) return !1;
				var n = r.list[e.slice(t + 1)];
				return n ? 0 <= n.indexOf(" " + e.slice(0, t) + " ") : !1
			},
			get: function(e) {
				var t = e.lastIndexOf(".");
				if(0 >= t || t >= e.length - 1) return null;
				var n = e.lastIndexOf(".", t - 1);
				if(0 >= n || n >= t - 1) return null;
				var o = r.list[e.slice(t + 1)];
				return !o || 0 > o.indexOf(" " + e.slice(n + 1, t) + " ") ? null : e.slice(n + 1)
			},
			noConflict: function() {
				return e.SecondLevelDomains === this && (e.SecondLevelDomains = t), this
			}
		};
	return r
}),
function(e, t) {
	"object" == typeof exports ? module.exports = t(require("./punycode"), require("./IPv6"), require("./SecondLevelDomains")) : "function" == typeof define && define.amd ? define(["./punycode", "./IPv6", "./SecondLevelDomains"], t) : e.URI = t(e.punycode, e.IPv6, e.SecondLevelDomains, e)
}(this, function(e, t, r, n) {
	function o(e, t) {
		var r = 1 <= arguments.length,
			n = 2 <= arguments.length;
		if(!(this instanceof o)) return r ? n ? new o(e, t) : new o(e) : new o;
		if(void 0 === e) {
			if(r) throw new TypeError("undefined is not a valid argument for URI");
			e = "undefined" != typeof location ? location.href + "" : ""
		}
		return this.href(e), void 0 !== t ? this.absoluteTo(t) : this
	}

	function a(e) {
		return e.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1")
	}

	function i(e) {
		return void 0 === e ? "Undefined" : String(Object.prototype.toString.call(e)).slice(8, -1)
	}

	function s(e) {
		return "Array" === i(e)
	}

	function u(e, t) {
		var r, n, o = {};
		if("RegExp" === i(t)) o = null;
		else if(s(t))
			for(r = 0, n = t.length; n > r; r++) o[t[r]] = !0;
		else o[t] = !0;
		for(r = 0, n = e.length; n > r; r++)(o && void 0 !== o[e[r]] || !o && t.test(e[r])) && (e.splice(r, 1), n--, r--);
		return e
	}

	function c(e, t) {
		var r, n;
		if(s(t)) {
			for(r = 0, n = t.length; n > r; r++)
				if(!c(e, t[r])) return !1;
			return !0
		}
		var o = i(t);
		for(r = 0, n = e.length; n > r; r++)
			if("RegExp" === o) {
				if("string" == typeof e[r] && e[r].match(t)) return !0
			} else if(e[r] === t) return !0;
		return !1
	}

	function p(e, t) {
		if(!s(e) || !s(t) || e.length !== t.length) return !1;
		e.sort(), t.sort();
		for(var r = 0, n = e.length; n > r; r++)
			if(e[r] !== t[r]) return !1;
		return !0
	}

	function h(e) {
		return escape(e)
	}

	function l(e) {
		return encodeURIComponent(e).replace(/[!'()*]/g, h).replace(/\*/g, "%2A")
	}

	function d(e) {
		return function(t, r) {
			return void 0 === t ? this._parts[e] || "" : (this._parts[e] = t || null, this.build(!r), this)
		}
	}

	function m(e, t) {
		return function(r, n) {
			return void 0 === r ? this._parts[e] || "" : (null !== r && (r += "", r.charAt(0) === t && (r = r.substring(1))), this._parts[e] = r, this.build(!n), this)
		}
	}
	var g = n && n.URI;
	o.version = "1.15.2";
	var f = o.prototype,
		v = Object.prototype.hasOwnProperty;
	o._parts = function() {
		return {
			protocol: null,
			username: null,
			password: null,
			hostname: null,
			urn: null,
			port: null,
			path: null,
			query: null,
			fragment: null,
			duplicateQueryParameters: o.duplicateQueryParameters,
			escapeQuerySpace: o.escapeQuerySpace
		}
	}, o.duplicateQueryParameters = !1, o.escapeQuerySpace = !0, o.protocol_expression = /^[a-z][a-z0-9.+-]*$/i, o.idn_expression = /[^a-z0-9\.-]/i, o.punycode_expression = /(xn--)/i, o.ip4_expression = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/, o.ip6_expression = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/, o.find_uri_expression = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?\u00ab\u00bb\u201c\u201d\u2018\u2019]))/gi, o.findUri = {
		start: /\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi,
		end: /[\s\r\n]|$/,
		trim: /[`!()\[\]{};:'".,<>?\u00ab\u00bb\u201c\u201d\u201e\u2018\u2019]+$/
	}, o.defaultPorts = {
		http: "80",
		https: "443",
		ftp: "21",
		gopher: "70",
		ws: "80",
		wss: "443"
	}, o.invalid_hostname_characters = /[^a-zA-Z0-9\.-]/, o.domAttributes = {
		a: "href",
		blockquote: "cite",
		link: "href",
		base: "href",
		script: "src",
		form: "action",
		img: "src",
		area: "href",
		iframe: "src",
		embed: "src",
		source: "src",
		track: "src",
		input: "src",
		audio: "src",
		video: "src"
	}, o.getDomAttribute = function(e) {
		if(e && e.nodeName) {
			var t = e.nodeName.toLowerCase();
			return "input" === t && "image" !== e.type ? void 0 : o.domAttributes[t]
		}
	}, o.encode = l, o.decode = decodeURIComponent, o.iso8859 = function() {
		o.encode = escape, o.decode = unescape
	}, o.unicode = function() {
		o.encode = l, o.decode = decodeURIComponent
	}, o.characters = {
		pathname: {
			encode: {
				expression: /%(24|26|2B|2C|3B|3D|3A|40)/gi,
				map: {
					"%24": "$",
					"%26": "&",
					"%2B": "+",
					"%2C": ",",
					"%3B": ";",
					"%3D": "=",
					"%3A": ":",
					"%40": "@"
				}
			},
			decode: {
				expression: /[\/\?#]/g,
				map: {
					"/": "%2F",
					"?": "%3F",
					"#": "%23"
				}
			}
		},
		reserved: {
			encode: {
				expression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/gi,
				map: {
					"%3A": ":",
					"%2F": "/",
					"%3F": "?",
					"%23": "#",
					"%5B": "[",
					"%5D": "]",
					"%40": "@",
					"%21": "!",
					"%24": "$",
					"%26": "&",
					"%27": "'",
					"%28": "(",
					"%29": ")",
					"%2A": "*",
					"%2B": "+",
					"%2C": ",",
					"%3B": ";",
					"%3D": "="
				}
			}
		},
		urnpath: {
			encode: {
				expression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/gi,
				map: {
					"%21": "!",
					"%24": "$",
					"%27": "'",
					"%28": "(",
					"%29": ")",
					"%2A": "*",
					"%2B": "+",
					"%2C": ",",
					"%3B": ";",
					"%3D": "=",
					"%40": "@"
				}
			},
			decode: {
				expression: /[\/\?#:]/g,
				map: {
					"/": "%2F",
					"?": "%3F",
					"#": "%23",
					":": "%3A"
				}
			}
		}
	}, o.encodeQuery = function(e, t) {
		var r = o.encode(e + "");
		return void 0 === t && (t = o.escapeQuerySpace), t ? r.replace(/%20/g, "+") : r
	}, o.decodeQuery = function(e, t) {
		e += "", void 0 === t && (t = o.escapeQuerySpace);
		try {
			return o.decode(t ? e.replace(/\+/g, "%20") : e)
		} catch(r) {
			return e
		}
	};
	var y, b = {
			encode: "encode",
			decode: "decode"
		},
		_ = function(e, t) {
			return function(r) {
				try {
					return o[t](r + "").replace(o.characters[e][t].expression, function(r) {
						return o.characters[e][t].map[r]
					})
				} catch(n) {
					return r
				}
			}
		};
	for(y in b) o[y + "PathSegment"] = _("pathname", b[y]), o[y + "UrnPathSegment"] = _("urnpath", b[y]);
	b = function(e, t, r) {
		return function(n) {
			var a;
			a = r ? function(e) {
				return o[t](o[r](e))
			} : o[t], n = (n + "").split(e);
			for(var i = 0, s = n.length; s > i; i++) n[i] = a(n[i]);
			return n.join(e)
		}
	}, o.decodePath = b("/", "decodePathSegment"), o.decodeUrnPath = b(":", "decodeUrnPathSegment"), o.recodePath = b("/", "encodePathSegment", "decode"), o.recodeUrnPath = b(":", "encodeUrnPathSegment", "decode"), o.encodeReserved = _("reserved", "encode"), o.parse = function(e, t) {
		var r;
		return t || (t = {}), r = e.indexOf("#"), r > -1 && (t.fragment = e.substring(r + 1) || null, e = e.substring(0, r)), r = e.indexOf("?"), r > -1 && (t.query = e.substring(r + 1) || null, e = e.substring(0, r)), "//" === e.substring(0, 2) ? (t.protocol = null, e = e.substring(2), e = o.parseAuthority(e, t)) : (r = e.indexOf(":"), r > -1 && (t.protocol = e.substring(0, r) || null, t.protocol && !t.protocol.match(o.protocol_expression) ? t.protocol = void 0 : "//" === e.substring(r + 1, r + 3) ? (e = e.substring(r + 3), e = o.parseAuthority(e, t)) : (e = e.substring(r + 1), t.urn = !0))), t.path = e, t
	}, o.parseHost = function(e, t) {
		var r, n = e.indexOf("/");
		if(-1 === n && (n = e.length), "[" === e.charAt(0)) r = e.indexOf("]"), t.hostname = e.substring(1, r) || null, t.port = e.substring(r + 2, n) || null, "/" === t.port && (t.port = null);
		else {
			var o = e.indexOf(":");
			r = e.indexOf("/"), o = e.indexOf(":", o + 1), -1 !== o && (-1 === r || r > o) ? (t.hostname = e.substring(0, n) || null, t.port = null) : (r = e.substring(0, n).split(":"), t.hostname = r[0] || null, t.port = r[1] || null)
		}
		return t.hostname && "/" !== e.substring(n).charAt(0) && (n++, e = "/" + e), e.substring(n) || "/"
	}, o.parseAuthority = function(e, t) {
		return e = o.parseUserinfo(e, t), o.parseHost(e, t)
	}, o.parseUserinfo = function(e, t) {
		var r = e.indexOf("/"),
			n = e.lastIndexOf("@", r > -1 ? r : e.length - 1);
		return n > -1 && (-1 === r || r > n) ? (r = e.substring(0, n).split(":"), t.username = r[0] ? o.decode(r[0]) : null, r.shift(), t.password = r[0] ? o.decode(r.join(":")) : null, e = e.substring(n + 1)) : (t.username = null, t.password = null), e
	}, o.parseQuery = function(e, t) {
		if(!e) return {};
		if(e = e.replace(/&+/g, "&").replace(/^\?*&*|&+$/g, ""), !e) return {};
		for(var r, n, a = {}, i = e.split("&"), s = i.length, u = 0; s > u; u++) r = i[u].split("="), n = o.decodeQuery(r.shift(), t), r = r.length ? o.decodeQuery(r.join("="), t) : null, v.call(a, n) ? (("string" == typeof a[n] || null === a[n]) && (a[n] = [a[n]]), a[n].push(r)) : a[n] = r;
		return a
	}, o.build = function(e) {
		var t = "";
		return e.protocol && (t += e.protocol + ":"), e.urn || !t && !e.hostname || (t += "//"), t += o.buildAuthority(e) || "", "string" == typeof e.path && ("/" !== e.path.charAt(0) && "string" == typeof e.hostname && (t += "/"), t += e.path), "string" == typeof e.query && e.query && (t += "?" + e.query), "string" == typeof e.fragment && e.fragment && (t += "#" + e.fragment), t
	}, o.buildHost = function(e) {
		var t = "";
		return e.hostname ? (t = o.ip6_expression.test(e.hostname) ? t + ("[" + e.hostname + "]") : t + e.hostname, e.port && (t += ":" + e.port), t) : ""
	}, o.buildAuthority = function(e) {
		return o.buildUserinfo(e) + o.buildHost(e)
	}, o.buildUserinfo = function(e) {
		var t = "";
		return e.username && (t += o.encode(e.username), e.password && (t += ":" + o.encode(e.password)), t += "@"), t
	}, o.buildQuery = function(e, t, r) {
		var n, a, i, u, c = "";
		for(a in e)
			if(v.call(e, a) && a)
				if(s(e[a]))
					for(n = {}, i = 0, u = e[a].length; u > i; i++) void 0 !== e[a][i] && void 0 === n[e[a][i] + ""] && (c += "&" + o.buildQueryParameter(a, e[a][i], r), !0 !== t && (n[e[a][i] + ""] = !0));
				else void 0 !== e[a] && (c += "&" + o.buildQueryParameter(a, e[a], r));
		return c.substring(1)
	}, o.buildQueryParameter = function(e, t, r) {
		return o.encodeQuery(e, r) + (null !== t ? "=" + o.encodeQuery(t, r) : "")
	}, o.addQuery = function(e, t, r) {
		if("object" == typeof t)
			for(var n in t) v.call(t, n) && o.addQuery(e, n, t[n]);
		else {
			if("string" != typeof t) throw new TypeError("URI.addQuery() accepts an object, string as the name parameter");
			void 0 === e[t] ? e[t] = r : ("string" == typeof e[t] && (e[t] = [e[t]]), s(r) || (r = [r]), e[t] = (e[t] || []).concat(r))
		}
	}, o.removeQuery = function(e, t, r) {
		var n;
		if(s(t))
			for(r = 0, n = t.length; n > r; r++) e[t[r]] = void 0;
		else if("RegExp" === i(t))
			for(n in e) t.test(n) && (e[n] = void 0);
		else if("object" == typeof t)
			for(n in t) v.call(t, n) && o.removeQuery(e, n, t[n]);
		else {
			if("string" != typeof t) throw new TypeError("URI.removeQuery() accepts an object, string, RegExp as the first parameter");
			void 0 !== r ? "RegExp" === i(r) ? e[t] = !s(e[t]) && r.test(e[t]) ? void 0 : u(e[t], r) : e[t] === r ? e[t] = void 0 : s(e[t]) && (e[t] = u(e[t], r)) : e[t] = void 0
		}
	}, o.hasQuery = function(e, t, r, n) {
		if("object" == typeof t) {
			for(var a in t)
				if(v.call(t, a) && !o.hasQuery(e, a, t[a])) return !1;
			return !0
		}
		if("string" != typeof t) throw new TypeError("URI.hasQuery() accepts an object, string as the name parameter");
		switch(i(r)) {
			case "Undefined":
				return t in e;
			case "Boolean":
				return e = Boolean(s(e[t]) ? e[t].length : e[t]), r === e;
			case "Function":
				return !!r(e[t], t, e);
			case "Array":
				return s(e[t]) ? (n ? c : p)(e[t], r) : !1;
			case "RegExp":
				return s(e[t]) ? n ? c(e[t], r) : !1 : Boolean(e[t] && e[t].match(r));
			case "Number":
				r = String(r);
			case "String":
				return s(e[t]) ? n ? c(e[t], r) : !1 : e[t] === r;
			default:
				throw new TypeError("URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter")
		}
	}, o.commonPath = function(e, t) {
		var r, n = Math.min(e.length, t.length);
		for(r = 0; n > r; r++)
			if(e.charAt(r) !== t.charAt(r)) {
				r--;
				break
			}
		return 1 > r ? e.charAt(0) === t.charAt(0) && "/" === e.charAt(0) ? "/" : "" : (("/" !== e.charAt(r) || "/" !== t.charAt(r)) && (r = e.substring(0, r).lastIndexOf("/")), e.substring(0, r + 1))
	}, o.withinString = function(e, t, r) {
		r || (r = {});
		var n = r.start || o.findUri.start,
			a = r.end || o.findUri.end,
			i = r.trim || o.findUri.trim,
			s = /[a-z0-9-]=["']?$/i;
		for(n.lastIndex = 0;;) {
			var u = n.exec(e);
			if(!u) break;
			if(u = u.index, r.ignoreHtml) {
				var c = e.slice(Math.max(u - 3, 0), u);
				if(c && s.test(c)) continue
			}
			var c = u + e.slice(u).search(a),
				p = e.slice(u, c).replace(i, "");
			r.ignore && r.ignore.test(p) || (c = u + p.length, p = t(p, u, c, e), e = e.slice(0, u) + p + e.slice(c), n.lastIndex = u + p.length)
		}
		return n.lastIndex = 0, e
	}, o.ensureValidHostname = function(t) {
		if(t.match(o.invalid_hostname_characters)) {
			if(!e) throw new TypeError('Hostname "' + t + '" contains characters other than [A-Z0-9.-] and Punycode.js is not available');
			if(e.toASCII(t).match(o.invalid_hostname_characters)) throw new TypeError('Hostname "' + t + '" contains characters other than [A-Z0-9.-]')
		}
	}, o.noConflict = function(e) {
		return e ? (e = {
			URI: this.noConflict()
		}, n.URITemplate && "function" == typeof n.URITemplate.noConflict && (e.URITemplate = n.URITemplate.noConflict()), n.IPv6 && "function" == typeof n.IPv6.noConflict && (e.IPv6 = n.IPv6.noConflict()), n.SecondLevelDomains && "function" == typeof n.SecondLevelDomains.noConflict && (e.SecondLevelDomains = n.SecondLevelDomains.noConflict()), e) : (n.URI === this && (n.URI = g), this)
	}, f.build = function(e) {
		return !0 === e ? this._deferred_build = !0 : (void 0 === e || this._deferred_build) && (this._string = o.build(this._parts), this._deferred_build = !1), this
	}, f.clone = function() {
		return new o(this)
	}, f.valueOf = f.toString = function() {
		return this.build(!1)._string
	}, f.protocol = d("protocol"), f.username = d("username"), f.password = d("password"), f.hostname = d("hostname"), f.port = d("port"), f.query = m("query", "?"), f.fragment = m("fragment", "#"), f.search = function(e, t) {
		var r = this.query(e, t);
		return "string" == typeof r && r.length ? "?" + r : r
	}, f.hash = function(e, t) {
		var r = this.fragment(e, t);
		return "string" == typeof r && r.length ? "#" + r : r
	}, f.pathname = function(e, t) {
		if(void 0 === e || !0 === e) {
			var r = this._parts.path || (this._parts.hostname ? "/" : "");
			return e ? (this._parts.urn ? o.decodeUrnPath : o.decodePath)(r) : r
		}
		return this._parts.path = this._parts.urn ? e ? o.recodeUrnPath(e) : "" : e ? o.recodePath(e) : "/", this.build(!t), this
	}, f.path = f.pathname, f.href = function(e, t) {
		var r;
		if(void 0 === e) return this.toString();
		this._string = "", this._parts = o._parts();
		var n = e instanceof o,
			a = "object" == typeof e && (e.hostname || e.path || e.pathname);
		if(e.nodeName && (a = o.getDomAttribute(e), e = e[a] || "", a = !1), !n && a && void 0 !== e.pathname && (e = e.toString()), "string" == typeof e || e instanceof String) this._parts = o.parse(String(e), this._parts);
		else {
			if(!n && !a) throw new TypeError("invalid input");
			for(r in n = n ? e._parts : e) v.call(this._parts, r) && (this._parts[r] = n[r])
		}
		return this.build(!t), this
	}, f.is = function(e) {
		var t = !1,
			n = !1,
			a = !1,
			i = !1,
			s = !1,
			u = !1,
			c = !1,
			p = !this._parts.urn;
		switch(this._parts.hostname && (p = !1, n = o.ip4_expression.test(this._parts.hostname), a = o.ip6_expression.test(this._parts.hostname), t = n || a, s = (i = !t) && r && r.has(this._parts.hostname), u = i && o.idn_expression.test(this._parts.hostname), c = i && o.punycode_expression.test(this._parts.hostname)), e.toLowerCase()) {
			case "relative":
				return p;
			case "absolute":
				return !p;
			case "domain":
			case "name":
				return i;
			case "sld":
				return s;
			case "ip":
				return t;
			case "ip4":
			case "ipv4":
			case "inet4":
				return n;
			case "ip6":
			case "ipv6":
			case "inet6":
				return a;
			case "idn":
				return u;
			case "url":
				return !this._parts.urn;
			case "urn":
				return !!this._parts.urn;
			case "punycode":
				return c
		}
		return null
	};
	var w = f.protocol,
		x = f.port,
		k = f.hostname;
	f.protocol = function(e, t) {
		if(void 0 !== e && e && (e = e.replace(/:(\/\/)?$/, ""), !e.match(o.protocol_expression))) throw new TypeError('Protocol "' + e + "\" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]");
		return w.call(this, e, t)
	}, f.scheme = f.protocol, f.port = function(e, t) {
		if(this._parts.urn) return void 0 === e ? "" : this;
		if(void 0 !== e && (0 === e && (e = null), e && (e += "", ":" === e.charAt(0) && (e = e.substring(1)), e.match(/[^0-9]/)))) throw new TypeError('Port "' + e + '" contains characters other than [0-9]');
		return x.call(this, e, t)
	}, f.hostname = function(e, t) {
		if(this._parts.urn) return void 0 === e ? "" : this;
		if(void 0 !== e) {
			var r = {};
			o.parseHost(e, r), e = r.hostname
		}
		return k.call(this, e, t)
	}, f.host = function(e, t) {
		return this._parts.urn ? void 0 === e ? "" : this : void 0 === e ? this._parts.hostname ? o.buildHost(this._parts) : "" : (o.parseHost(e, this._parts), this.build(!t), this)
	}, f.authority = function(e, t) {
		return this._parts.urn ? void 0 === e ? "" : this : void 0 === e ? this._parts.hostname ? o.buildAuthority(this._parts) : "" : (o.parseAuthority(e, this._parts), this.build(!t), this)
	}, f.userinfo = function(e, t) {
		if(this._parts.urn) return void 0 === e ? "" : this;
		if(void 0 === e) {
			if(!this._parts.username) return "";
			var r = o.buildUserinfo(this._parts);
			return r.substring(0, r.length - 1)
		}
		return "@" !== e[e.length - 1] && (e += "@"), o.parseUserinfo(e, this._parts), this.build(!t), this
	}, f.resource = function(e, t) {
		var r;
		return void 0 === e ? this.path() + this.search() + this.hash() : (r = o.parse(e), this._parts.path = r.path, this._parts.query = r.query, this._parts.fragment = r.fragment, this.build(!t), this)
	}, f.subdomain = function(e, t) {
		if(this._parts.urn) return void 0 === e ? "" : this;
		if(void 0 === e) {
			if(!this._parts.hostname || this.is("IP")) return "";
			var r = this._parts.hostname.length - this.domain().length - 1;
			return this._parts.hostname.substring(0, r) || ""
		}
		return r = this._parts.hostname.length - this.domain().length, r = this._parts.hostname.substring(0, r), r = new RegExp("^" + a(r)), e && "." !== e.charAt(e.length - 1) && (e += "."), e && o.ensureValidHostname(e), this._parts.hostname = this._parts.hostname.replace(r, e), this.build(!t), this
	}, f.domain = function(e, t) {
		if(this._parts.urn) return void 0 === e ? "" : this;
		if("boolean" == typeof e && (t = e, e = void 0), void 0 === e) {
			if(!this._parts.hostname || this.is("IP")) return "";
			var r = this._parts.hostname.match(/\./g);
			return r && 2 > r.length ? this._parts.hostname : (r = this._parts.hostname.length - this.tld(t).length - 1, r = this._parts.hostname.lastIndexOf(".", r - 1) + 1, this._parts.hostname.substring(r) || "")
		}
		if(!e) throw new TypeError("cannot set domain empty");
		return o.ensureValidHostname(e), !this._parts.hostname || this.is("IP") ? this._parts.hostname = e : (r = new RegExp(a(this.domain()) + "$"), this._parts.hostname = this._parts.hostname.replace(r, e)), this.build(!t), this
	}, f.tld = function(e, t) {
		if(this._parts.urn) return void 0 === e ? "" : this;
		if("boolean" == typeof e && (t = e, e = void 0), void 0 === e) {
			if(!this._parts.hostname || this.is("IP")) return "";
			var n = this._parts.hostname.lastIndexOf("."),
				n = this._parts.hostname.substring(n + 1);
			return !0 !== t && r && r.list[n.toLowerCase()] ? r.get(this._parts.hostname) || n : n
		}
		if(!e) throw new TypeError("cannot set TLD empty");
		if(e.match(/[^a-zA-Z0-9-]/)) {
			if(!r || !r.is(e)) throw new TypeError('TLD "' + e + '" contains characters other than [A-Z0-9]');
			n = new RegExp(a(this.tld()) + "$"), this._parts.hostname = this._parts.hostname.replace(n, e)
		} else {
			if(!this._parts.hostname || this.is("IP")) throw new ReferenceError("cannot set TLD on non-domain host");
			n = new RegExp(a(this.tld()) + "$"), this._parts.hostname = this._parts.hostname.replace(n, e)
		}
		return this.build(!t), this
	}, f.directory = function(e, t) {
		if(this._parts.urn) return void 0 === e ? "" : this;
		if(void 0 === e || !0 === e) {
			if(!this._parts.path && !this._parts.hostname) return "";
			if("/" === this._parts.path) return "/";
			var r = this._parts.path.length - this.filename().length - 1,
				r = this._parts.path.substring(0, r) || (this._parts.hostname ? "/" : "");
			return e ? o.decodePath(r) : r
		}
		return r = this._parts.path.length - this.filename().length, r = this._parts.path.substring(0, r), r = new RegExp("^" + a(r)), this.is("relative") || (e || (e = "/"), "/" !== e.charAt(0) && (e = "/" + e)), e && "/" !== e.charAt(e.length - 1) && (e += "/"), e = o.recodePath(e), this._parts.path = this._parts.path.replace(r, e), this.build(!t), this
	}, f.filename = function(e, t) {
		if(this._parts.urn) return void 0 === e ? "" : this;
		if(void 0 === e || !0 === e) {
			if(!this._parts.path || "/" === this._parts.path) return "";
			var r = this._parts.path.lastIndexOf("/"),
				r = this._parts.path.substring(r + 1);
			return e ? o.decodePathSegment(r) : r
		}
		r = !1, "/" === e.charAt(0) && (e = e.substring(1)), e.match(/\.?\//) && (r = !0);
		var n = new RegExp(a(this.filename()) + "$");
		return e = o.recodePath(e), this._parts.path = this._parts.path.replace(n, e), r ? this.normalizePath(t) : this.build(!t), this
	}, f.suffix = function(e, t) {
		if(this._parts.urn) return void 0 === e ? "" : this;
		if(void 0 === e || !0 === e) {
			if(!this._parts.path || "/" === this._parts.path) return "";
			var r = this.filename(),
				n = r.lastIndexOf(".");
			return -1 === n ? "" : (r = r.substring(n + 1), r = /^[a-z0-9%]+$/i.test(r) ? r : "", e ? o.decodePathSegment(r) : r)
		}
		if("." === e.charAt(0) && (e = e.substring(1)), r = this.suffix()) n = e ? new RegExp(a(r) + "$") : new RegExp(a("." + r) + "$");
		else {
			if(!e) return this;
			this._parts.path += "." + o.recodePath(e)
		}
		return n && (e = o.recodePath(e), this._parts.path = this._parts.path.replace(n, e)), this.build(!t), this
	}, f.segment = function(e, t, r) {
		var n = this._parts.urn ? ":" : "/",
			o = this.path(),
			a = "/" === o.substring(0, 1),
			o = o.split(n);
		if(void 0 !== e && "number" != typeof e && (r = t, t = e, e = void 0), void 0 !== e && "number" != typeof e) throw Error('Bad segment "' + e + '", must be 0-based integer');
		if(a && o.shift(), 0 > e && (e = Math.max(o.length + e, 0)), void 0 === t) return void 0 === e ? o : o[e];
		if(null === e || void 0 === o[e])
			if(s(t)) {
				o = [], e = 0;
				for(var i = t.length; i > e; e++)(t[e].length || o.length && o[o.length - 1].length) && (o.length && !o[o.length - 1].length && o.pop(), o.push(t[e]))
			} else(t || "string" == typeof t) && ("" === o[o.length - 1] ? o[o.length - 1] = t : o.push(t));
		else t ? o[e] = t : o.splice(e, 1);
		return a && o.unshift(""), this.path(o.join(n), r)
	}, f.segmentCoded = function(e, t, r) {
		var n, a;
		if("number" != typeof e && (r = t, t = e, e = void 0), void 0 === t) {
			if(e = this.segment(e, t, r), s(e))
				for(n = 0, a = e.length; a > n; n++) e[n] = o.decode(e[n]);
			else e = void 0 !== e ? o.decode(e) : void 0;
			return e
		}
		if(s(t))
			for(n = 0, a = t.length; a > n; n++) t[n] = o.encode(t[n]);
		else t = "string" == typeof t || t instanceof String ? o.encode(t) : t;
		return this.segment(e, t, r)
	};
	var z = f.query;
	return f.query = function(e, t) {
		if(!0 === e) return o.parseQuery(this._parts.query, this._parts.escapeQuerySpace);
		if("function" == typeof e) {
			var r = o.parseQuery(this._parts.query, this._parts.escapeQuerySpace),
				n = e.call(this, r);
			return this._parts.query = o.buildQuery(n || r, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace), this.build(!t), this
		}
		return void 0 !== e && "string" != typeof e ? (this._parts.query = o.buildQuery(e, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace), this.build(!t), this) : z.call(this, e, t)
	}, f.setQuery = function(e, t, r) {
		var n = o.parseQuery(this._parts.query, this._parts.escapeQuerySpace);
		if("string" == typeof e || e instanceof String) n[e] = void 0 !== t ? t : null;
		else {
			if("object" != typeof e) throw new TypeError("URI.addQuery() accepts an object, string as the name parameter");
			for(var a in e) v.call(e, a) && (n[a] = e[a])
		}
		return this._parts.query = o.buildQuery(n, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace), "string" != typeof e && (r = t), this.build(!r), this
	}, f.addQuery = function(e, t, r) {
		var n = o.parseQuery(this._parts.query, this._parts.escapeQuerySpace);
		return o.addQuery(n, e, void 0 === t ? null : t), this._parts.query = o.buildQuery(n, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace), "string" != typeof e && (r = t), this.build(!r), this
	}, f.removeQuery = function(e, t, r) {
		var n = o.parseQuery(this._parts.query, this._parts.escapeQuerySpace);
		return o.removeQuery(n, e, t), this._parts.query = o.buildQuery(n, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace), "string" != typeof e && (r = t), this.build(!r), this
	}, f.hasQuery = function(e, t, r) {
		var n = o.parseQuery(this._parts.query, this._parts.escapeQuerySpace);
		return o.hasQuery(n, e, t, r)
	}, f.setSearch = f.setQuery, f.addSearch = f.addQuery, f.removeSearch = f.removeQuery, f.hasSearch = f.hasQuery, f.normalize = function() {
		return this._parts.urn ? this.normalizeProtocol(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build() : this.normalizeProtocol(!1).normalizeHostname(!1).normalizePort(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build()
	}, f.normalizeProtocol = function(e) {
		return "string" == typeof this._parts.protocol && (this._parts.protocol = this._parts.protocol.toLowerCase(), this.build(!e)), this
	}, f.normalizeHostname = function(r) {
		return this._parts.hostname && (this.is("IDN") && e ? this._parts.hostname = e.toASCII(this._parts.hostname) : this.is("IPv6") && t && (this._parts.hostname = t.best(this._parts.hostname)), this._parts.hostname = this._parts.hostname.toLowerCase(), this.build(!r)), this
	}, f.normalizePort = function(e) {
		return "string" == typeof this._parts.protocol && this._parts.port === o.defaultPorts[this._parts.protocol] && (this._parts.port = null, this.build(!e)), this
	}, f.normalizePath = function(e) {
		var t = this._parts.path;
		if(!t) return this;
		if(this._parts.urn) return this._parts.path = o.recodeUrnPath(this._parts.path), this.build(!e), this;
		if("/" === this._parts.path) return this;
		var r, n, a, i = "";
		for("/" !== t.charAt(0) && (r = !0, t = "/" + t), ("/.." === t.slice(-3) || "/." === t.slice(-2)) && (t += "/"), t = t.replace(/(\/(\.\/)+)|(\/\.$)/g, "/").replace(/\/{2,}/g, "/"), r && (i = t.substring(1).match(/^(\.\.\/)+/) || "") && (i = i[0]); n = t.indexOf("/.."), -1 !== n;) 0 !== n ? (a = t.substring(0, n).lastIndexOf("/"), -1 === a && (a = n), t = t.substring(0, a) + t.substring(n + 3)) : t = t.substring(3);
		return r && this.is("relative") && (t = i + t.substring(1)), t = o.recodePath(t), this._parts.path = t, this.build(!e), this
	}, f.normalizePathname = f.normalizePath, f.normalizeQuery = function(e) {
		return "string" == typeof this._parts.query && (this._parts.query.length ? this.query(o.parseQuery(this._parts.query, this._parts.escapeQuerySpace)) : this._parts.query = null, this.build(!e)), this
	}, f.normalizeFragment = function(e) {
		return this._parts.fragment || (this._parts.fragment = null, this.build(!e)), this
	}, f.normalizeSearch = f.normalizeQuery, f.normalizeHash = f.normalizeFragment, f.iso8859 = function() {
		var e = o.encode,
			t = o.decode;
		o.encode = escape, o.decode = decodeURIComponent;
		try {
			this.normalize()
		} finally {
			o.encode = e, o.decode = t
		}
		return this
	}, f.unicode = function() {
		var e = o.encode,
			t = o.decode;
		o.encode = l, o.decode = unescape;
		try {
			this.normalize()
		} finally {
			o.encode = e, o.decode = t
		}
		return this
	}, f.readable = function() {
		var t = this.clone();
		t.username("").password("").normalize();
		var r = "";
		if(t._parts.protocol && (r += t._parts.protocol + "://"), t._parts.hostname && (t.is("punycode") && e ? (r += e.toUnicode(t._parts.hostname), t._parts.port && (r += ":" + t._parts.port)) : r += t.host()), t._parts.hostname && t._parts.path && "/" !== t._parts.path.charAt(0) && (r += "/"), r += t.path(!0), t._parts.query) {
			for(var n = "", a = 0, i = t._parts.query.split("&"), s = i.length; s > a; a++) {
				var u = (i[a] || "").split("="),
					n = n + ("&" + o.decodeQuery(u[0], this._parts.escapeQuerySpace).replace(/&/g, "%26"));
				void 0 !== u[1] && (n += "=" + o.decodeQuery(u[1], this._parts.escapeQuerySpace).replace(/&/g, "%26"))
			}
			r += "?" + n.substring(1)
		}
		return r += o.decodeQuery(t.hash(), !0)
	}, f.absoluteTo = function(e) {
		var t, r, n = this.clone(),
			a = ["protocol", "username", "password", "hostname", "port"];
		if(this._parts.urn) throw Error("URNs do not have any generally defined hierarchical components");
		if(e instanceof o || (e = new o(e)), n._parts.protocol || (n._parts.protocol = e._parts.protocol), this._parts.hostname) return n;
		for(t = 0; r = a[t]; t++) n._parts[r] = e._parts[r];
		return n._parts.path ? ".." === n._parts.path.substring(-2) && (n._parts.path += "/") : (n._parts.path = e._parts.path, n._parts.query || (n._parts.query = e._parts.query)), "/" !== n.path().charAt(0) && (a = (a = e.directory()) ? a : 0 === e.path().indexOf("/") ? "/" : "", n._parts.path = (a ? a + "/" : "") + n._parts.path, n.normalizePath()), n.build(), n
	}, f.relativeTo = function(e) {
		var t, r, n, a = this.clone().normalize();
		if(a._parts.urn) throw Error("URNs do not have any generally defined hierarchical components");
		if(e = new o(e).normalize(), t = a._parts, r = e._parts, n = a.path(), e = e.path(), "/" !== n.charAt(0)) throw Error("URI is already relative");
		if("/" !== e.charAt(0)) throw Error("Cannot calculate a URI relative to another relative URI");
		return t.protocol === r.protocol && (t.protocol = null), t.username !== r.username || t.password !== r.password || null !== t.protocol || null !== t.username || null !== t.password || t.hostname !== r.hostname || t.port !== r.port ? a.build() : (t.hostname = null, t.port = null, n === e ? (t.path = "", a.build()) : (n = o.commonPath(n, e)) ? (r = r.path.substring(n.length).replace(/[^\/]*$/, "").replace(/.*?\//g, "../"), t.path = r + t.path.substring(n.length) || "./", a.build()) : a.build())
	}, f.equals = function(e) {
		var t = this.clone();
		e = new o(e);
		var r, n = {},
			a = {},
			i = {};
		if(t.normalize(), e.normalize(), t.toString() === e.toString()) return !0;
		if(n = t.query(), a = e.query(), t.query(""), e.query(""), t.toString() !== e.toString() || n.length !== a.length) return !1;
		n = o.parseQuery(n, this._parts.escapeQuerySpace), a = o.parseQuery(a, this._parts.escapeQuerySpace);
		for(r in n)
			if(v.call(n, r)) {
				if(s(n[r])) {
					if(!p(n[r], a[r])) return !1
				} else if(n[r] !== a[r]) return !1;
				i[r] = !0
			}
		for(r in a)
			if(v.call(a, r) && !i[r]) return !1;
		return !0
	}, f.duplicateQueryParameters = function(e) {
		return this._parts.duplicateQueryParameters = !!e, this
	}, f.escapeQuerySpace = function(e) {
		return this._parts.escapeQuerySpace = !!e, this
	}, o
}),
function(e, t) {
	"object" == typeof exports ? module.exports = t(require("./URI")) : "function" == typeof define && define.amd ? define(["./URI"], t) : e.URITemplate = t(e.URI, e)
}(this, function(e, t) {
	function r(e) {
		return r._cache[e] ? r._cache[e] : this instanceof r ? (this.expression = e, r._cache[e] = this, this) : new r(e)
	}

	function n(e) {
		this.data = e, this.cache = {}
	}
	var o = t && t.URITemplate,
		a = Object.prototype.hasOwnProperty,
		i = r.prototype,
		s = {
			"": {
				prefix: "",
				separator: ",",
				named: !1,
				empty_name_separator: !1,
				encode: "encode"
			},
			"+": {
				prefix: "",
				separator: ",",
				named: !1,
				empty_name_separator: !1,
				encode: "encodeReserved"
			},
			"#": {
				prefix: "#",
				separator: ",",
				named: !1,
				empty_name_separator: !1,
				encode: "encodeReserved"
			},
			".": {
				prefix: ".",
				separator: ".",
				named: !1,
				empty_name_separator: !1,
				encode: "encode"
			},
			"/": {
				prefix: "/",
				separator: "/",
				named: !1,
				empty_name_separator: !1,
				encode: "encode"
			},
			";": {
				prefix: ";",
				separator: ";",
				named: !0,
				empty_name_separator: !1,
				encode: "encode"
			},
			"?": {
				prefix: "?",
				separator: "&",
				named: !0,
				empty_name_separator: !0,
				encode: "encode"
			},
			"&": {
				prefix: "&",
				separator: "&",
				named: !0,
				empty_name_separator: !0,
				encode: "encode"
			}
		};
	return r._cache = {}, r.EXPRESSION_PATTERN = /\{([^a-zA-Z0-9%_]?)([^\}]+)(\}|$)/g, r.VARIABLE_PATTERN = /^([^*:]+)((\*)|:(\d+))?$/, r.VARIABLE_NAME_PATTERN = /[^a-zA-Z0-9%_]/, r.expand = function(e, t) {
		var n, o, a, i = s[e.operator],
			u = i.named ? "Named" : "Unnamed",
			c = e.variables,
			p = [];
		for(a = 0; o = c[a]; a++) n = t.get(o.name), n.val.length ? p.push(r["expand" + u](n, i, o.explode, o.explode && i.separator || ",", o.maxlength, o.name)) : n.type && p.push("");
		return p.length ? i.prefix + p.join(i.separator) : ""
	}, r.expandNamed = function(t, r, n, o, a, i) {
		var s = "",
			u = r.encode;
		r = r.empty_name_separator;
		var c, p, h, l = !t[u].length,
			d = 2 === t.type ? "" : e[u](i);
		for(p = 0, h = t.val.length; h > p; p++) a ? (c = e[u](t.val[p][1].substring(0, a)), 2 === t.type && (d = e[u](t.val[p][0].substring(0, a)))) : l ? (c = e[u](t.val[p][1]), 2 === t.type ? (d = e[u](t.val[p][0]), t[u].push([d, c])) : t[u].push([void 0, c])) : (c = t[u][p][1], 2 === t.type && (d = t[u][p][0])), s && (s += o), n ? s += d + (r || c ? "=" : "") + c : (p || (s += e[u](i) + (r || c ? "=" : "")), 2 === t.type && (s += d + ","), s += c);
		return s
	}, r.expandUnnamed = function(t, r, n, o, a) {
		var i = "",
			s = r.encode;
		r = r.empty_name_separator;
		var u, c, p, h, l = !t[s].length;
		for(p = 0, h = t.val.length; h > p; p++) a ? c = e[s](t.val[p][1].substring(0, a)) : l ? (c = e[s](t.val[p][1]), t[s].push([2 === t.type ? e[s](t.val[p][0]) : void 0, c])) : c = t[s][p][1], i && (i += o), 2 === t.type && (u = a ? e[s](t.val[p][0].substring(0, a)) : t[s][p][0], i += u, i = n ? i + (r || c ? "=" : "") : i + ","), i += c;
		return i
	}, r.noConflict = function() {
		return t.URITemplate === r && (t.URITemplate = o), r
	}, i.expand = function(e) {
		var t = "";
		this.parts && this.parts.length || this.parse(), e instanceof n || (e = new n(e));
		for(var o = 0, a = this.parts.length; a > o; o++) t += "string" == typeof this.parts[o] ? this.parts[o] : r.expand(this.parts[o], e);
		return t
	}, i.parse = function() {
		var e, t, n, o = this.expression,
			a = r.EXPRESSION_PATTERN,
			i = r.VARIABLE_PATTERN,
			u = r.VARIABLE_NAME_PATTERN,
			c = [],
			p = 0;
		for(a.lastIndex = 0;;) {
			if(t = a.exec(o), null === t) {
				c.push(o.substring(p));
				break
			}
			if(c.push(o.substring(p, t.index)), p = t.index + t[0].length, !s[t[1]]) throw Error('Unknown Operator "' + t[1] + '" in "' + t[0] + '"');
			if(!t[3]) throw Error('Unclosed Expression "' + t[0] + '"');
			e = t[2].split(",");
			for(var h = 0, l = e.length; l > h; h++) {
				if(n = e[h].match(i), null === n) throw Error('Invalid Variable "' + e[h] + '" in "' + t[0] + '"');
				if(n[1].match(u)) throw Error('Invalid Variable Name "' + n[1] + '" in "' + t[0] + '"');
				e[h] = {
					name: n[1],
					explode: !!n[3],
					maxlength: n[4] && parseInt(n[4], 10)
				}
			}
			if(!e.length) throw Error('Expression Missing Variable(s) "' + t[0] + '"');
			c.push({
				expression: t[0],
				operator: t[1],
				variables: e
			})
		}
		return c.length || c.push(o), this.parts = c, this
	}, n.prototype.get = function(e) {
		var t, r = this.data,
			n = {
				type: 0,
				val: [],
				encode: [],
				encodeReserved: []
			};
		if(void 0 !== this.cache[e]) return this.cache[e];
		if(this.cache[e] = n, r = "[object Function]" === String(Object.prototype.toString.call(r)) ? r(e) : "[object Function]" === String(Object.prototype.toString.call(r[e])) ? r[e](e) : r[e], void 0 !== r && null !== r)
			if("[object Array]" === String(Object.prototype.toString.call(r))) {
				for(t = 0, e = r.length; e > t; t++) void 0 !== r[t] && null !== r[t] && n.val.push([void 0, String(r[t])]);
				n.val.length && (n.type = 3)
			} else if("[object Object]" === String(Object.prototype.toString.call(r))) {
			for(t in r) a.call(r, t) && void 0 !== r[t] && null !== r[t] && n.val.push([t, String(r[t])]);
			n.val.length && (n.type = 2)
		} else n.type = 1, n.val.push([void 0, String(r)]);
		return n
	}, e.expand = function(t, n) {
		var o = new r(t).expand(n);
		return new e(o)
	}, r
});
! function(e, t) {
	function n(e) {
		var t, n, r = O[e] = {};
		for(e = e.split(/\s+/), t = 0, n = e.length; n > t; t++) r[e[t]] = !0;
		return r
	}

	function r(e, n, r) {
		if(r === t && 1 === e.nodeType) {
			var i = "data-" + n.replace(q, "-$1").toLowerCase();
			if(r = e.getAttribute(i), "string" == typeof r) {
				try {
					r = "true" === r ? !0 : "false" === r ? !1 : "null" === r ? null : H.isNumeric(r) ? +r : P.test(r) ? H.parseJSON(r) : r
				} catch(o) {}
				H.data(e, n, r)
			} else r = t
		}
		return r
	}

	function i(e) {
		for(var t in e)
			if(("data" !== t || !H.isEmptyObject(e[t])) && "toJSON" !== t) return !1;
		return !0
	}

	function o(e, t, n) {
		var r = t + "defer",
			i = t + "queue",
			o = t + "mark",
			a = H._data(e, r);
		!a || "queue" !== n && H._data(e, i) || "mark" !== n && H._data(e, o) || setTimeout(function() {
			H._data(e, i) || H._data(e, o) || (H.removeData(e, r, !0), a.fire())
		}, 0)
	}

	function a() {
		return !1
	}

	function s() {
		return !0
	}

	function l(e) {
		return !e || !e.parentNode || 11 === e.parentNode.nodeType
	}

	function u(e, t, n) {
		if(t = t || 0, H.isFunction(t)) return H.grep(e, function(e, r) {
			var i = !!t.call(e, r, e);
			return i === n
		});
		if(t.nodeType) return H.grep(e, function(e) {
			return e === t === n
		});
		if("string" == typeof t) {
			var r = H.grep(e, function(e) {
				return 1 === e.nodeType
			});
			if(ct.test(t)) return H.filter(t, r, !n);
			t = H.filter(t, r)
		}
		return H.grep(e, function(e) {
			return H.inArray(e, t) >= 0 === n
		})
	}

	function c(e) {
		var t = ht.split("|"),
			n = e.createDocumentFragment();
		if(n.createElement)
			for(; t.length;) n.createElement(t.pop());
		return n
	}

	function f(e) {
		return H.nodeName(e, "table") ? e.getElementsByTagName("tbody")[0] || e.appendChild(e.ownerDocument.createElement("tbody")) : e
	}

	function d(e, t) {
		if(1 === t.nodeType && H.hasData(e)) {
			var n, r, i, o = H._data(e),
				a = H._data(t, o),
				s = o.events;
			if(s) {
				delete a.handle, a.events = {};
				for(n in s)
					for(r = 0, i = s[n].length; i > r; r++) H.event.add(t, n, s[n][r])
			}
			a.data && (a.data = H.extend({}, a.data))
		}
	}

	function p(e, t) {
		var n;
		1 === t.nodeType && (t.clearAttributes && t.clearAttributes(), t.mergeAttributes && t.mergeAttributes(e), n = t.nodeName.toLowerCase(), "object" === n ? t.outerHTML = e.outerHTML : "input" !== n || "checkbox" !== e.type && "radio" !== e.type ? "option" === n ? t.selected = e.defaultSelected : "input" === n || "textarea" === n ? t.defaultValue = e.defaultValue : "script" === n && t.text !== e.text && (t.text = e.text) : (e.checked && (t.defaultChecked = t.checked = e.checked), t.value !== e.value && (t.value = e.value)), t.removeAttribute(H.expando), t.removeAttribute("_submit_attached"), t.removeAttribute("_change_attached"))
	}

	function h(e) {
		return "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName("*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll("*") : []
	}

	function m(e) {
		("checkbox" === e.type || "radio" === e.type) && (e.defaultChecked = e.checked)
	}

	function g(e) {
		var t = (e.nodeName || "").toLowerCase();
		"input" === t ? m(e) : "script" !== t && "undefined" != typeof e.getElementsByTagName && H.grep(e.getElementsByTagName("input"), m)
	}

	function y(e) {
		var t = F.createElement("div");
		return At.appendChild(t), t.innerHTML = e.outerHTML, t.firstChild
	}

	function v(e, t, n) {
		var r = "width" === t ? e.offsetWidth : e.offsetHeight,
			i = "width" === t ? 1 : 0,
			o = 4;
		if(r > 0) {
			if("border" !== n)
				for(; o > i; i += 2) n || (r -= parseFloat(H.css(e, "padding" + Wt[i])) || 0), "margin" === n ? r += parseFloat(H.css(e, n + Wt[i])) || 0 : r -= parseFloat(H.css(e, "border" + Wt[i] + "Width")) || 0;
			return r + "px"
		}
		if(r = Lt(e, t), (0 > r || null == r) && (r = e.style[t]), Ot.test(r)) return r;
		if(r = parseFloat(r) || 0, n)
			for(; o > i; i += 2) r += parseFloat(H.css(e, "padding" + Wt[i])) || 0, "padding" !== n && (r += parseFloat(H.css(e, "border" + Wt[i] + "Width")) || 0), "margin" === n && (r += parseFloat(H.css(e, n + Wt[i])) || 0);
		return r + "px"
	}

	function b(e) {
		return function(t, n) {
			if("string" != typeof t && (n = t, t = "*"), H.isFunction(n))
				for(var r, i, o, a = t.toLowerCase().split(tn), s = 0, l = a.length; l > s; s++) r = a[s], o = /^\+/.test(r), o && (r = r.substr(1) || "*"), i = e[r] = e[r] || [], i[o ? "unshift" : "push"](n)
		}
	}

	function x(e, n, r, i, o, a) {
		o = o || n.dataTypes[0], a = a || {}, a[o] = !0;
		for(var s, l = e[o], u = 0, c = l ? l.length : 0, f = e === an; c > u && (f || !s); u++) s = l[u](n, r, i), "string" == typeof s && (!f || a[s] ? s = t : (n.dataTypes.unshift(s), s = x(e, n, r, i, s, a)));
		return !f && s || a["*"] || (s = x(e, n, r, i, "*", a)), s
	}

	function T(e, n) {
		var r, i, o = H.ajaxSettings.flatOptions || {};
		for(r in n) n[r] !== t && ((o[r] ? e : i || (i = {}))[r] = n[r]);
		i && H.extend(!0, e, i)
	}

	function w(e, t, n, r) {
		if(H.isArray(t)) H.each(t, function(t, i) {
			n || Xt.test(e) ? r(e, i) : w(e + "[" + ("object" == typeof i ? t : "") + "]", i, n, r)
		});
		else if(n || "object" !== H.type(t)) r(e, t);
		else
			for(var i in t) w(e + "[" + i + "]", t[i], n, r)
	}

	function N(e, n, r) {
		var i, o, a, s, l = e.contents,
			u = e.dataTypes,
			c = e.responseFields;
		for(o in c) o in r && (n[c[o]] = r[o]);
		for(;
			"*" === u[0];) u.shift(), i === t && (i = e.mimeType || n.getResponseHeader("content-type"));
		if(i)
			for(o in l)
				if(l[o] && l[o].test(i)) {
					u.unshift(o);
					break
				}
		if(u[0] in r) a = u[0];
		else {
			for(o in r) {
				if(!u[0] || e.converters[o + " " + u[0]]) {
					a = o;
					break
				}
				s || (s = o)
			}
			a = a || s
		}
		return a ? (a !== u[0] && u.unshift(a), r[a]) : void 0
	}

	function C(e, n) {
		e.dataFilter && (n = e.dataFilter(n, e.dataType));
		var r, i, o, a, s, l, u, c, f = e.dataTypes,
			d = {},
			p = f.length,
			h = f[0];
		for(r = 1; p > r; r++) {
			if(1 === r)
				for(i in e.converters) "string" == typeof i && (d[i.toLowerCase()] = e.converters[i]);
			if(a = h, h = f[r], "*" === h) h = a;
			else if("*" !== a && a !== h) {
				if(s = a + " " + h, l = d[s] || d["* " + h], !l) {
					c = t;
					for(u in d)
						if(o = u.split(" "), (o[0] === a || "*" === o[0]) && (c = d[o[1] + " " + h])) {
							u = d[u], u === !0 ? l = c : c === !0 && (l = u);
							break
						}
				}
				l || c || H.error("No conversion from " + s.replace(" ", " to ")), l !== !0 && (n = l ? l(n) : c(u(n)))
			}
		}
		return n
	}

	function E() {
		try {
			return new e.XMLHttpRequest
		} catch(t) {}
	}

	function k() {
		try {
			return new e.ActiveXObject("Microsoft.XMLHTTP")
		} catch(t) {}
	}

	function S() {
		return setTimeout(A, 0), vn = H.now()
	}

	function A() {
		vn = t
	}

	function L(e, t) {
		var n = {};
		return H.each(wn.concat.apply([], wn.slice(0, t)), function() {
			n[this] = e
		}), n
	}

	function D(e) {
		if(!bn[e]) {
			var t = F.body,
				n = H("<" + e + ">").appendTo(t),
				r = n.css("display");
			n.remove(), ("none" === r || "" === r) && (mn || (mn = F.createElement("iframe"), mn.frameBorder = mn.width = mn.height = 0), t.appendChild(mn), gn && mn.createElement || (gn = (mn.contentWindow || mn.contentDocument).document, gn.write((H.support.boxModel ? "<!doctype html>" : "") + "<html><body>"), gn.close()), n = gn.createElement(e), gn.body.appendChild(n), r = H.css(n, "display"), t.removeChild(mn)), bn[e] = r
		}
		return bn[e]
	}

	function j(e) {
		return H.isWindow(e) ? e : 9 === e.nodeType ? e.defaultView || e.parentWindow : !1
	}
	var F = e.document,
		M = e.navigator,
		_ = e.location,
		H = function() {
			function n() {
				if(!s.isReady) {
					try {
						F.documentElement.doScroll("left")
					} catch(e) {
						return setTimeout(n, 1), void 0
					}
					s.ready()
				}
			}
			var r, i, o, a, s = function(e, t) {
					return new s.fn.init(e, t, r)
				},
				l = e.jQuery,
				u = e.$,
				c = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
				f = /\S/,
				d = /^\s+/,
				p = /\s+$/,
				h = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
				m = /^[\],:{}\s]*$/,
				g = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
				y = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
				v = /(?:^|:|,)(?:\s*\[)+/g,
				b = /(webkit)[ \/]([\w.]+)/,
				x = /(opera)(?:.*version)?[ \/]([\w.]+)/,
				T = /(msie) ([\w.]+)/,
				w = /(mozilla)(?:.*? rv:([\w.]+))?/,
				N = /-([a-z]|[0-9])/gi,
				C = /^-ms-/,
				E = function(e, t) {
					return(t + "").toUpperCase()
				},
				k = M.userAgent,
				S = Object.prototype.toString,
				A = Object.prototype.hasOwnProperty,
				L = Array.prototype.push,
				D = Array.prototype.slice,
				j = String.prototype.trim,
				_ = Array.prototype.indexOf,
				H = {};
			return s.fn = s.prototype = {
				constructor: s,
				init: function(e, n, r) {
					var i, o, a, l;
					if(!e) return this;
					if(e.nodeType) return this.context = this[0] = e, this.length = 1, this;
					if("body" === e && !n && F.body) return this.context = F, this[0] = F.body, this.selector = e, this.length = 1, this;
					if("string" == typeof e) {
						if(i = "<" === e.charAt(0) && ">" === e.charAt(e.length - 1) && e.length >= 3 ? [null, e, null] : c.exec(e), !i || !i[1] && n) return !n || n.jquery ? (n || r).find(e) : this.constructor(n).find(e);
						if(i[1]) return n = n instanceof s ? n[0] : n, l = n ? n.ownerDocument || n : F, a = h.exec(e), a ? s.isPlainObject(n) ? (e = [F.createElement(a[1])], s.fn.attr.call(e, n, !0)) : e = [l.createElement(a[1])] : (a = s.buildFragment([i[1]], [l]), e = (a.cacheable ? s.clone(a.fragment) : a.fragment).childNodes), s.merge(this, e);
						if(o = F.getElementById(i[2]), o && o.parentNode) {
							if(o.id !== i[2]) return r.find(e);
							this.length = 1, this[0] = o
						}
						return this.context = F, this.selector = e, this
					}
					return s.isFunction(e) ? r.ready(e) : (e.selector !== t && (this.selector = e.selector, this.context = e.context), s.makeArray(e, this))
				},
				selector: "",
				jquery: "1.7.2",
				length: 0,
				size: function() {
					return this.length
				},
				toArray: function() {
					return D.call(this, 0)
				},
				get: function(e) {
					return null == e ? this.toArray() : 0 > e ? this[this.length + e] : this[e]
				},
				pushStack: function(e, t, n) {
					var r = this.constructor();
					return s.isArray(e) ? L.apply(r, e) : s.merge(r, e), r.prevObject = this, r.context = this.context, "find" === t ? r.selector = this.selector + (this.selector ? " " : "") + n : t && (r.selector = this.selector + "." + t + "(" + n + ")"), r
				},
				each: function(e, t) {
					return s.each(this, e, t)
				},
				ready: function(e) {
					return s.bindReady(), o.add(e), this
				},
				eq: function(e) {
					return e = +e, -1 === e ? this.slice(e) : this.slice(e, e + 1)
				},
				first: function() {
					return this.eq(0)
				},
				last: function() {
					return this.eq(-1)
				},
				slice: function() {
					return this.pushStack(D.apply(this, arguments), "slice", D.call(arguments).join(","))
				},
				map: function(e) {
					return this.pushStack(s.map(this, function(t, n) {
						return e.call(t, n, t)
					}))
				},
				end: function() {
					return this.prevObject || this.constructor(null)
				},
				push: L,
				sort: [].sort,
				splice: [].splice
			}, s.fn.init.prototype = s.fn, s.extend = s.fn.extend = function() {
				var e, n, r, i, o, a, l = arguments[0] || {},
					u = 1,
					c = arguments.length,
					f = !1;
				for("boolean" == typeof l && (f = l, l = arguments[1] || {}, u = 2), "object" == typeof l || s.isFunction(l) || (l = {}), c === u && (l = this, --u); c > u; u++)
					if(null != (e = arguments[u]))
						for(n in e) r = l[n], i = e[n], l !== i && (f && i && (s.isPlainObject(i) || (o = s.isArray(i))) ? (o ? (o = !1, a = r && s.isArray(r) ? r : []) : a = r && s.isPlainObject(r) ? r : {}, l[n] = s.extend(f, a, i)) : i !== t && (l[n] = i));
				return l
			}, s.extend({
				noConflict: function(t) {
					return e.$ === s && (e.$ = u), t && e.jQuery === s && (e.jQuery = l), s
				},
				isReady: !1,
				readyWait: 1,
				holdReady: function(e) {
					e ? s.readyWait++ : s.ready(!0)
				},
				ready: function(e) {
					if(e === !0 && !--s.readyWait || e !== !0 && !s.isReady) {
						if(!F.body) return setTimeout(s.ready, 1);
						if(s.isReady = !0, e !== !0 && --s.readyWait > 0) return;
						o.fireWith(F, [s]), s.fn.trigger && s(F).trigger("ready").off("ready")
					}
				},
				bindReady: function() {
					if(!o) {
						if(o = s.Callbacks("once memory"), "complete" === F.readyState) return setTimeout(s.ready, 1);
						if(F.addEventListener) F.addEventListener("DOMContentLoaded", a, !1), e.addEventListener("load", s.ready, !1);
						else if(F.attachEvent) {
							F.attachEvent("onreadystatechange", a), e.attachEvent("onload", s.ready);
							var t = !1;
							try {
								t = null == e.frameElement
							} catch(r) {}
							F.documentElement.doScroll && t && n()
						}
					}
				},
				isFunction: function(e) {
					return "function" === s.type(e)
				},
				isArray: Array.isArray || function(e) {
					return "array" === s.type(e)
				},
				isWindow: function(e) {
					return null != e && e == e.window
				},
				isNumeric: function(e) {
					return !isNaN(parseFloat(e)) && isFinite(e)
				},
				type: function(e) {
					return null == e ? String(e) : H[S.call(e)] || "object"
				},
				isPlainObject: function(e) {
					if(!e || "object" !== s.type(e) || e.nodeType || s.isWindow(e)) return !1;
					try {
						if(e.constructor && !A.call(e, "constructor") && !A.call(e.constructor.prototype, "isPrototypeOf")) return !1
					} catch(n) {
						return !1
					}
					var r;
					for(r in e);
					return r === t || A.call(e, r)
				},
				isEmptyObject: function(e) {
					for(var t in e) return !1;
					return !0
				},
				error: function(e) {
					throw new Error(e)
				},
				parseJSON: function(t) {
					return "string" == typeof t && t ? (t = s.trim(t), e.JSON && e.JSON.parse ? e.JSON.parse(t) : m.test(t.replace(g, "@").replace(y, "]").replace(v, "")) ? new Function("return " + t)() : (s.error("Invalid JSON: " + t), void 0)) : null
				},
				parseXML: function(n) {
					if("string" != typeof n || !n) return null;
					var r, i;
					try {
						e.DOMParser ? (i = new DOMParser, r = i.parseFromString(n, "text/xml")) : (r = new ActiveXObject("Microsoft.XMLDOM"), r.async = "false", r.loadXML(n))
					} catch(o) {
						r = t
					}
					return r && r.documentElement && !r.getElementsByTagName("parsererror").length || s.error("Invalid XML: " + n), r
				},
				noop: function() {},
				globalEval: function(t) {
					t && f.test(t) && (e.execScript || function(t) {
						e.eval.call(e, t)
					})(t)
				},
				camelCase: function(e) {
					return e.replace(C, "ms-").replace(N, E)
				},
				nodeName: function(e, t) {
					return e.nodeName && e.nodeName.toUpperCase() === t.toUpperCase()
				},
				each: function(e, n, r) {
					var i, o = 0,
						a = e.length,
						l = a === t || s.isFunction(e);
					if(r)
						if(l) {
							for(i in e)
								if(n.apply(e[i], r) === !1) break
						} else
							for(; a > o && n.apply(e[o++], r) !== !1;);
					else if(l) {
						for(i in e)
							if(n.call(e[i], i, e[i]) === !1) break
					} else
						for(; a > o && n.call(e[o], o, e[o++]) !== !1;);
					return e
				},
				trim: j ? function(e) {
					return null == e ? "" : j.call(e)
				} : function(e) {
					return null == e ? "" : e.toString().replace(d, "").replace(p, "")
				},
				makeArray: function(e, t) {
					var n = t || [];
					if(null != e) {
						var r = s.type(e);
						null == e.length || "string" === r || "function" === r || "regexp" === r || s.isWindow(e) ? L.call(n, e) : s.merge(n, e)
					}
					return n
				},
				inArray: function(e, t, n) {
					var r;
					if(t) {
						if(_) return _.call(t, e, n);
						for(r = t.length, n = n ? 0 > n ? Math.max(0, r + n) : n : 0; r > n; n++)
							if(n in t && t[n] === e) return n
					}
					return -1
				},
				merge: function(e, n) {
					var r = e.length,
						i = 0;
					if("number" == typeof n.length)
						for(var o = n.length; o > i; i++) e[r++] = n[i];
					else
						for(; n[i] !== t;) e[r++] = n[i++];
					return e.length = r, e
				},
				grep: function(e, t, n) {
					var r, i = [];
					n = !!n;
					for(var o = 0, a = e.length; a > o; o++) r = !!t(e[o], o), n !== r && i.push(e[o]);
					return i
				},
				map: function(e, n, r) {
					var i, o, a = [],
						l = 0,
						u = e.length,
						c = e instanceof s || u !== t && "number" == typeof u && (u > 0 && e[0] && e[u - 1] || 0 === u || s.isArray(e));
					if(c)
						for(; u > l; l++) i = n(e[l], l, r), null != i && (a[a.length] = i);
					else
						for(o in e) i = n(e[o], o, r), null != i && (a[a.length] = i);
					return a.concat.apply([], a)
				},
				guid: 1,
				proxy: function(e, n) {
					if("string" == typeof n) {
						var r = e[n];
						n = e, e = r
					}
					if(!s.isFunction(e)) return t;
					var i = D.call(arguments, 2),
						o = function() {
							return e.apply(n, i.concat(D.call(arguments)))
						};
					return o.guid = e.guid = e.guid || o.guid || s.guid++, o
				},
				access: function(e, n, r, i, o, a, l) {
					var u, c = null == r,
						f = 0,
						d = e.length;
					if(r && "object" == typeof r) {
						for(f in r) s.access(e, n, f, r[f], 1, a, i);
						o = 1
					} else if(i !== t) {
						if(u = l === t && s.isFunction(i), c && (u ? (u = n, n = function(e, t, n) {
								return u.call(s(e), n)
							}) : (n.call(e, i), n = null)), n)
							for(; d > f; f++) n(e[f], r, u ? i.call(e[f], f, n(e[f], r)) : i, l);
						o = 1
					}
					return o ? e : c ? n.call(e) : d ? n(e[0], r) : a
				},
				now: function() {
					return(new Date).getTime()
				},
				uaMatch: function(e) {
					e = e.toLowerCase();
					var t = b.exec(e) || x.exec(e) || T.exec(e) || e.indexOf("compatible") < 0 && w.exec(e) || [];
					return {
						browser: t[1] || "",
						version: t[2] || "0"
					}
				},
				sub: function() {
					function e(t, n) {
						return new e.fn.init(t, n)
					}
					s.extend(!0, e, this), e.superclass = this, e.fn = e.prototype = this(), e.fn.constructor = e, e.sub = this.sub, e.fn.init = function(n, r) {
						return r && r instanceof s && !(r instanceof e) && (r = e(r)), s.fn.init.call(this, n, r, t)
					}, e.fn.init.prototype = e.fn;
					var t = e(F);
					return e
				},
				browser: {}
			}), s.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(e, t) {
				H["[object " + t + "]"] = t.toLowerCase()
			}), i = s.uaMatch(k), i.browser && (s.browser[i.browser] = !0, s.browser.version = i.version), s.browser.webkit && (s.browser.safari = !0), f.test("\xa0") && (d = /^[\s\xA0]+/, p = /[\s\xA0]+$/), r = s(F), F.addEventListener ? a = function() {
				F.removeEventListener("DOMContentLoaded", a, !1), s.ready()
			} : F.attachEvent && (a = function() {
				"complete" === F.readyState && (F.detachEvent("onreadystatechange", a), s.ready())
			}), s
		}(),
		O = {};
	H.Callbacks = function(e) {
		e = e ? O[e] || n(e) : {};
		var r, i, o, a, s, l, u = [],
			c = [],
			f = function(t) {
				var n, r, i, o;
				for(n = 0, r = t.length; r > n; n++) i = t[n], o = H.type(i), "array" === o ? f(i) : "function" === o && (e.unique && p.has(i) || u.push(i))
			},
			d = function(t, n) {
				for(n = n || [], r = !e.memory || [t, n], i = !0, o = !0, l = a || 0, a = 0, s = u.length; u && s > l; l++)
					if(u[l].apply(t, n) === !1 && e.stopOnFalse) {
						r = !0;
						break
					}
				o = !1, u && (e.once ? r === !0 ? p.disable() : u = [] : c && c.length && (r = c.shift(), p.fireWith(r[0], r[1])))
			},
			p = {
				add: function() {
					if(u) {
						var e = u.length;
						f(arguments), o ? s = u.length : r && r !== !0 && (a = e, d(r[0], r[1]))
					}
					return this
				},
				remove: function() {
					if(u)
						for(var t = arguments, n = 0, r = t.length; r > n; n++)
							for(var i = 0; i < u.length && (t[n] !== u[i] || (o && s >= i && (s--, l >= i && l--), u.splice(i--, 1), !e.unique)); i++);
					return this
				},
				has: function(e) {
					if(u)
						for(var t = 0, n = u.length; n > t; t++)
							if(e === u[t]) return !0;
					return !1
				},
				empty: function() {
					return u = [], this
				},
				disable: function() {
					return u = c = r = t, this
				},
				disabled: function() {
					return !u
				},
				lock: function() {
					return c = t, r && r !== !0 || p.disable(), this
				},
				locked: function() {
					return !c
				},
				fireWith: function(t, n) {
					return c && (o ? e.once || c.push([t, n]) : e.once && r || d(t, n)), this
				},
				fire: function() {
					return p.fireWith(this, arguments), this
				},
				fired: function() {
					return !!i
				}
			};
		return p
	};
	var B = [].slice;
	H.extend({
		Deferred: function(e) {
			var t, n = H.Callbacks("once memory"),
				r = H.Callbacks("once memory"),
				i = H.Callbacks("memory"),
				o = "pending",
				a = {
					resolve: n,
					reject: r,
					notify: i
				},
				s = {
					done: n.add,
					fail: r.add,
					progress: i.add,
					state: function() {
						return o
					},
					isResolved: n.fired,
					isRejected: r.fired,
					then: function(e, t, n) {
						return l.done(e).fail(t).progress(n), this
					},
					always: function() {
						return l.done.apply(l, arguments).fail.apply(l, arguments), this
					},
					pipe: function(e, t, n) {
						return H.Deferred(function(r) {
							H.each({
								done: [e, "resolve"],
								fail: [t, "reject"],
								progress: [n, "notify"]
							}, function(e, t) {
								var n, i = t[0],
									o = t[1];
								H.isFunction(i) ? l[e](function() {
									n = i.apply(this, arguments), n && H.isFunction(n.promise) ? n.promise().then(r.resolve, r.reject, r.notify) : r[o + "With"](this === l ? r : this, [n])
								}) : l[e](r[o])
							})
						}).promise()
					},
					promise: function(e) {
						if(null == e) e = s;
						else
							for(var t in s) e[t] = s[t];
						return e
					}
				},
				l = s.promise({});
			for(t in a) l[t] = a[t].fire, l[t + "With"] = a[t].fireWith;
			return l.done(function() {
				o = "resolved"
			}, r.disable, i.lock).fail(function() {
				o = "rejected"
			}, n.disable, i.lock), e && e.call(l, l), l
		},
		when: function(e) {
			function t(e) {
				return function(t) {
					r[e] = arguments.length > 1 ? B.call(arguments, 0) : t, --s || l.resolveWith(l, r)
				}
			}

			function n(e) {
				return function(t) {
					a[e] = arguments.length > 1 ? B.call(arguments, 0) : t, l.notifyWith(u, a)
				}
			}
			var r = B.call(arguments, 0),
				i = 0,
				o = r.length,
				a = new Array(o),
				s = o,
				l = 1 >= o && e && H.isFunction(e.promise) ? e : H.Deferred(),
				u = l.promise();
			if(o > 1) {
				for(; o > i; i++) r[i] && r[i].promise && H.isFunction(r[i].promise) ? r[i].promise().then(t(i), l.reject, n(i)) : --s;
				s || l.resolveWith(l, r)
			} else l !== e && l.resolveWith(l, o ? [e] : []);
			return u
		}
	}), H.support = function() {
		{
			var t, n, r, i, o, a, s, l, u, c, f, d = F.createElement("div");
			F.documentElement
		}
		if(d.setAttribute("className", "t"), d.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>", n = d.getElementsByTagName("*"), r = d.getElementsByTagName("a")[0], !n || !n.length || !r) return {};
		i = F.createElement("select"), o = i.appendChild(F.createElement("option")), a = d.getElementsByTagName("input")[0], t = {
			leadingWhitespace: 3 === d.firstChild.nodeType,
			tbody: !d.getElementsByTagName("tbody").length,
			htmlSerialize: !!d.getElementsByTagName("link").length,
			style: /top/.test(r.getAttribute("style")),
			hrefNormalized: "/a" === r.getAttribute("href"),
			opacity: /^0.55/.test(r.style.opacity),
			cssFloat: !!r.style.cssFloat,
			checkOn: "on" === a.value,
			optSelected: o.selected,
			getSetAttribute: "t" !== d.className,
			enctype: !!F.createElement("form").enctype,
			html5Clone: "<:nav></:nav>" !== F.createElement("nav").cloneNode(!0).outerHTML,
			submitBubbles: !0,
			changeBubbles: !0,
			focusinBubbles: !1,
			deleteExpando: !0,
			noCloneEvent: !0,
			inlineBlockNeedsLayout: !1,
			shrinkWrapBlocks: !1,
			reliableMarginRight: !0,
			pixelMargin: !0
		}, H.boxModel = t.boxModel = "CSS1Compat" === F.compatMode, a.checked = !0, t.noCloneChecked = a.cloneNode(!0).checked, i.disabled = !0, t.optDisabled = !o.disabled;
		try {
			delete d.test
		} catch(p) {
			t.deleteExpando = !1
		}
		if(!d.addEventListener && d.attachEvent && d.fireEvent && (d.attachEvent("onclick", function() {
				t.noCloneEvent = !1
			}), d.cloneNode(!0).fireEvent("onclick")), a = F.createElement("input"), a.value = "t", a.setAttribute("type", "radio"), t.radioValue = "t" === a.value, a.setAttribute("checked", "checked"), a.setAttribute("name", "t"), d.appendChild(a), s = F.createDocumentFragment(), s.appendChild(d.lastChild), t.checkClone = s.cloneNode(!0).cloneNode(!0).lastChild.checked, t.appendChecked = a.checked, s.removeChild(a), s.appendChild(d), d.attachEvent)
			for(c in {
					submit: 1,
					change: 1,
					focusin: 1
				}) u = "on" + c, f = u in d, f || (d.setAttribute(u, "return;"), f = "function" == typeof d[u]), t[c + "Bubbles"] = f;
		return s.removeChild(d), s = i = o = d = a = null, H(function() {
			var n, r, i, o, a, s, u, c, p, h, m, g, y = F.getElementsByTagName("body")[0];
			y && (u = 1, g = "padding:0;margin:0;border:", h = "position:absolute;top:0;left:0;width:1px;height:1px;", m = g + "0;visibility:hidden;", c = "style='" + h + g + "5px solid #000;", p = "<div " + c + "display:block;'><div style='" + g + "0;display:block;overflow:hidden;'></div></div><table " + c + "' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>", n = F.createElement("div"), n.style.cssText = m + "width:0;height:0;position:static;top:0;margin-top:" + u + "px", y.insertBefore(n, y.firstChild), d = F.createElement("div"), n.appendChild(d), d.innerHTML = "<table><tr><td style='" + g + "0;display:none'></td><td>t</td></tr></table>", l = d.getElementsByTagName("td"), f = 0 === l[0].offsetHeight, l[0].style.display = "", l[1].style.display = "none", t.reliableHiddenOffsets = f && 0 === l[0].offsetHeight, e.getComputedStyle && (d.innerHTML = "", s = F.createElement("div"), s.style.width = "0", s.style.marginRight = "0", d.style.width = "2px", d.appendChild(s), t.reliableMarginRight = 0 === (parseInt((e.getComputedStyle(s, null) || {
				marginRight: 0
			}).marginRight, 10) || 0)), "undefined" != typeof d.style.zoom && (d.innerHTML = "", d.style.width = d.style.padding = "1px", d.style.border = 0, d.style.overflow = "hidden", d.style.display = "inline", d.style.zoom = 1, t.inlineBlockNeedsLayout = 3 === d.offsetWidth, d.style.display = "block", d.style.overflow = "visible", d.innerHTML = "<div style='width:5px;'></div>", t.shrinkWrapBlocks = 3 !== d.offsetWidth), d.style.cssText = h + m, d.innerHTML = p, r = d.firstChild, i = r.firstChild, o = r.nextSibling.firstChild.firstChild, a = {
				doesNotAddBorder: 5 !== i.offsetTop,
				doesAddBorderForTableAndCells: 5 === o.offsetTop
			}, i.style.position = "fixed", i.style.top = "20px", a.fixedPosition = 20 === i.offsetTop || 15 === i.offsetTop, i.style.position = i.style.top = "", r.style.overflow = "hidden", r.style.position = "relative", a.subtractsBorderForOverflowNotVisible = -5 === i.offsetTop, a.doesNotIncludeMarginInBodyOffset = y.offsetTop !== u, e.getComputedStyle && (d.style.marginTop = "1%", t.pixelMargin = "1%" !== (e.getComputedStyle(d, null) || {
				marginTop: 0
			}).marginTop), "undefined" != typeof n.style.zoom && (n.style.zoom = 1), y.removeChild(n), s = d = n = null, H.extend(t, a))
		}), t
	}();
	var P = /^(?:\{.*\}|\[.*\])$/,
		q = /([A-Z])/g;
	H.extend({
		cache: {},
		uuid: 0,
		expando: "jQuery" + (H.fn.jquery + Math.random()).replace(/\D/g, ""),
		noData: {
			embed: !0,
			object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
			applet: !0
		},
		hasData: function(e) {
			return e = e.nodeType ? H.cache[e[H.expando]] : e[H.expando], !!e && !i(e)
		},
		data: function(e, n, r, i) {
			if(H.acceptData(e)) {
				var o, a, s, l = H.expando,
					u = "string" == typeof n,
					c = e.nodeType,
					f = c ? H.cache : e,
					d = c ? e[l] : e[l] && l,
					p = "events" === n;
				if(d && f[d] && (p || i || f[d].data) || !u || r !== t) return d || (c ? e[l] = d = ++H.uuid : d = l), f[d] || (f[d] = {}, c || (f[d].toJSON = H.noop)), ("object" == typeof n || "function" == typeof n) && (i ? f[d] = H.extend(f[d], n) : f[d].data = H.extend(f[d].data, n)), o = a = f[d], i || (a.data || (a.data = {}), a = a.data), r !== t && (a[H.camelCase(n)] = r), p && !a[n] ? o.events : (u ? (s = a[n], null == s && (s = a[H.camelCase(n)])) : s = a, s)
			}
		},
		removeData: function(e, t, n) {
			if(H.acceptData(e)) {
				var r, o, a, s = H.expando,
					l = e.nodeType,
					u = l ? H.cache : e,
					c = l ? e[s] : s;
				if(u[c]) {
					if(t && (r = n ? u[c] : u[c].data)) {
						H.isArray(t) || (t in r ? t = [t] : (t = H.camelCase(t), t = t in r ? [t] : t.split(" ")));
						for(o = 0, a = t.length; a > o; o++) delete r[t[o]];
						if(!(n ? i : H.isEmptyObject)(r)) return
					}(n || (delete u[c].data, i(u[c]))) && (H.support.deleteExpando || !u.setInterval ? delete u[c] : u[c] = null, l && (H.support.deleteExpando ? delete e[s] : e.removeAttribute ? e.removeAttribute(s) : e[s] = null))
				}
			}
		},
		_data: function(e, t, n) {
			return H.data(e, t, n, !0)
		},
		acceptData: function(e) {
			if(e.nodeName) {
				var t = H.noData[e.nodeName.toLowerCase()];
				if(t) return !(t === !0 || e.getAttribute("classid") !== t)
			}
			return !0
		}
	}), H.fn.extend({
		data: function(e, n) {
			var i, o, a, s, l, u = this[0],
				c = 0,
				f = null;
			if(e === t) {
				if(this.length && (f = H.data(u), 1 === u.nodeType && !H._data(u, "parsedAttrs"))) {
					for(a = u.attributes, l = a.length; l > c; c++) s = a[c].name, 0 === s.indexOf("data-") && (s = H.camelCase(s.substring(5)), r(u, s, f[s]));
					H._data(u, "parsedAttrs", !0)
				}
				return f
			}
			return "object" == typeof e ? this.each(function() {
				H.data(this, e)
			}) : (i = e.split(".", 2), i[1] = i[1] ? "." + i[1] : "", o = i[1] + "!", H.access(this, function(n) {
				return n === t ? (f = this.triggerHandler("getData" + o, [i[0]]), f === t && u && (f = H.data(u, e), f = r(u, e, f)), f === t && i[1] ? this.data(i[0]) : f) : (i[1] = n, this.each(function() {
					var t = H(this);
					t.triggerHandler("setData" + o, i), H.data(this, e, n), t.triggerHandler("changeData" + o, i)
				}), void 0)
			}, null, n, arguments.length > 1, null, !1))
		},
		removeData: function(e) {
			return this.each(function() {
				H.removeData(this, e)
			})
		}
	}), H.extend({
		_mark: function(e, t) {
			e && (t = (t || "fx") + "mark", H._data(e, t, (H._data(e, t) || 0) + 1))
		},
		_unmark: function(e, t, n) {
			if(e !== !0 && (n = t, t = e, e = !1), t) {
				n = n || "fx";
				var r = n + "mark",
					i = e ? 0 : (H._data(t, r) || 1) - 1;
				i ? H._data(t, r, i) : (H.removeData(t, r, !0), o(t, n, "mark"))
			}
		},
		queue: function(e, t, n) {
			var r;
			return e ? (t = (t || "fx") + "queue", r = H._data(e, t), n && (!r || H.isArray(n) ? r = H._data(e, t, H.makeArray(n)) : r.push(n)), r || []) : void 0
		},
		dequeue: function(e, t) {
			t = t || "fx";
			var n = H.queue(e, t),
				r = n.shift(),
				i = {};
			"inprogress" === r && (r = n.shift()), r && ("fx" === t && n.unshift("inprogress"), H._data(e, t + ".run", i), r.call(e, function() {
				H.dequeue(e, t)
			}, i)), n.length || (H.removeData(e, t + "queue " + t + ".run", !0), o(e, t, "queue"))
		}
	}), H.fn.extend({
		queue: function(e, n) {
			var r = 2;
			return "string" != typeof e && (n = e, e = "fx", r--), arguments.length < r ? H.queue(this[0], e) : n === t ? this : this.each(function() {
				var t = H.queue(this, e, n);
				"fx" === e && "inprogress" !== t[0] && H.dequeue(this, e)
			})
		},
		dequeue: function(e) {
			return this.each(function() {
				H.dequeue(this, e)
			})
		},
		delay: function(e, t) {
			return e = H.fx ? H.fx.speeds[e] || e : e, t = t || "fx", this.queue(t, function(t, n) {
				var r = setTimeout(t, e);
				n.stop = function() {
					clearTimeout(r)
				}
			})
		},
		clearQueue: function(e) {
			return this.queue(e || "fx", [])
		},
		promise: function(e, n) {
			function r() {
				--l || o.resolveWith(a, [a])
			}
			"string" != typeof e && (n = e, e = t), e = e || "fx";
			for(var i, o = H.Deferred(), a = this, s = a.length, l = 1, u = e + "defer", c = e + "queue", f = e + "mark"; s--;)(i = H.data(a[s], u, t, !0) || (H.data(a[s], c, t, !0) || H.data(a[s], f, t, !0)) && H.data(a[s], u, H.Callbacks("once memory"), !0)) && (l++, i.add(r));
			return r(), o.promise(n)
		}
	});
	var W, I, $, R = /[\n\t\r]/g,
		X = /\s+/,
		z = /\r/g,
		V = /^(?:button|input)$/i,
		U = /^(?:button|input|object|select|textarea)$/i,
		G = /^a(?:rea)?$/i,
		Y = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
		J = H.support.getSetAttribute;
	H.fn.extend({
		attr: function(e, t) {
			return H.access(this, H.attr, e, t, arguments.length > 1)
		},
		removeAttr: function(e) {
			return this.each(function() {
				H.removeAttr(this, e)
			})
		},
		prop: function(e, t) {
			return H.access(this, H.prop, e, t, arguments.length > 1)
		},
		removeProp: function(e) {
			return e = H.propFix[e] || e, this.each(function() {
				try {
					this[e] = t, delete this[e]
				} catch(n) {}
			})
		},
		addClass: function(e) {
			var t, n, r, i, o, a, s;
			if(H.isFunction(e)) return this.each(function(t) {
				H(this).addClass(e.call(this, t, this.className))
			});
			if(e && "string" == typeof e)
				for(t = e.split(X), n = 0, r = this.length; r > n; n++)
					if(i = this[n], 1 === i.nodeType)
						if(i.className || 1 !== t.length) {
							for(o = " " + i.className + " ", a = 0, s = t.length; s > a; a++) ~o.indexOf(" " + t[a] + " ") || (o += t[a] + " ");
							i.className = H.trim(o)
						} else i.className = e;
			return this
		},
		removeClass: function(e) {
			var n, r, i, o, a, s, l;
			if(H.isFunction(e)) return this.each(function(t) {
				H(this).removeClass(e.call(this, t, this.className))
			});
			if(e && "string" == typeof e || e === t)
				for(n = (e || "").split(X), r = 0, i = this.length; i > r; r++)
					if(o = this[r], 1 === o.nodeType && o.className)
						if(e) {
							for(a = (" " + o.className + " ").replace(R, " "), s = 0, l = n.length; l > s; s++) a = a.replace(" " + n[s] + " ", " ");
							o.className = H.trim(a)
						} else o.className = "";
			return this
		},
		toggleClass: function(e, t) {
			var n = typeof e,
				r = "boolean" == typeof t;
			return H.isFunction(e) ? this.each(function(n) {
				H(this).toggleClass(e.call(this, n, this.className, t), t)
			}) : this.each(function() {
				if("string" === n)
					for(var i, o = 0, a = H(this), s = t, l = e.split(X); i = l[o++];) s = r ? s : !a.hasClass(i), a[s ? "addClass" : "removeClass"](i);
				else("undefined" === n || "boolean" === n) && (this.className && H._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "" : H._data(this, "__className__") || "")
			})
		},
		hasClass: function(e) {
			for(var t = " " + e + " ", n = 0, r = this.length; r > n; n++)
				if(1 === this[n].nodeType && (" " + this[n].className + " ").replace(R, " ").indexOf(t) > -1) return !0;
			return !1
		},
		val: function(e) {
			var n, r, i, o = this[0]; {
				if(arguments.length) return i = H.isFunction(e), this.each(function(r) {
					var o, a = H(this);
					1 === this.nodeType && (o = i ? e.call(this, r, a.val()) : e, null == o ? o = "" : "number" == typeof o ? o += "" : H.isArray(o) && (o = H.map(o, function(e) {
						return null == e ? "" : e + ""
					})), n = H.valHooks[this.type] || H.valHooks[this.nodeName.toLowerCase()], n && "set" in n && n.set(this, o, "value") !== t || (this.value = o))
				});
				if(o) return n = H.valHooks[o.type] || H.valHooks[o.nodeName.toLowerCase()], n && "get" in n && (r = n.get(o, "value")) !== t ? r : (r = o.value, "string" == typeof r ? r.replace(z, "") : null == r ? "" : r)
			}
		}
	}), H.extend({
		valHooks: {
			option: {
				get: function(e) {
					var t = e.attributes.value;
					return !t || t.specified ? e.value : e.text
				}
			},
			select: {
				get: function(e) {
					var t, n, r, i, o = e.selectedIndex,
						a = [],
						s = e.options,
						l = "select-one" === e.type;
					if(0 > o) return null;
					for(n = l ? o : 0, r = l ? o + 1 : s.length; r > n; n++)
						if(i = s[n], !(!i.selected || (H.support.optDisabled ? i.disabled : null !== i.getAttribute("disabled")) || i.parentNode.disabled && H.nodeName(i.parentNode, "optgroup"))) {
							if(t = H(i).val(), l) return t;
							a.push(t)
						}
					return l && !a.length && s.length ? H(s[o]).val() : a
				},
				set: function(e, t) {
					var n = H.makeArray(t);
					return H(e).find("option").each(function() {
						this.selected = H.inArray(H(this).val(), n) >= 0
					}), n.length || (e.selectedIndex = -1), n
				}
			}
		},
		attrFn: {
			val: !0,
			css: !0,
			html: !0,
			text: !0,
			data: !0,
			width: !0,
			height: !0,
			offset: !0
		},
		attr: function(e, n, r, i) {
			var o, a, s, l = e.nodeType;
			if(e && 3 !== l && 8 !== l && 2 !== l) return i && n in H.attrFn ? H(e)[n](r) : "undefined" == typeof e.getAttribute ? H.prop(e, n, r) : (s = 1 !== l || !H.isXMLDoc(e), s && (n = n.toLowerCase(), a = H.attrHooks[n] || (Y.test(n) ? I : W)), r !== t ? null === r ? (H.removeAttr(e, n), void 0) : a && "set" in a && s && (o = a.set(e, r, n)) !== t ? o : (e.setAttribute(n, "" + r), r) : a && "get" in a && s && null !== (o = a.get(e, n)) ? o : (o = e.getAttribute(n), null === o ? t : o))
		},
		removeAttr: function(e, t) {
			var n, r, i, o, a, s = 0;
			if(t && 1 === e.nodeType)
				for(r = t.toLowerCase().split(X), o = r.length; o > s; s++) i = r[s], i && (n = H.propFix[i] || i, a = Y.test(i), a || H.attr(e, i, ""), e.removeAttribute(J ? i : n), a && n in e && (e[n] = !1))
		},
		attrHooks: {
			type: {
				set: function(e, t) {
					if(V.test(e.nodeName) && e.parentNode) H.error("type property can't be changed");
					else if(!H.support.radioValue && "radio" === t && H.nodeName(e, "input")) {
						var n = e.value;
						return e.setAttribute("type", t), n && (e.value = n), t
					}
				}
			},
			value: {
				get: function(e, t) {
					return W && H.nodeName(e, "button") ? W.get(e, t) : t in e ? e.value : null
				},
				set: function(e, t, n) {
					return W && H.nodeName(e, "button") ? W.set(e, t, n) : (e.value = t, void 0)
				}
			}
		},
		propFix: {
			tabindex: "tabIndex",
			readonly: "readOnly",
			"for": "htmlFor",
			"class": "className",
			maxlength: "maxLength",
			cellspacing: "cellSpacing",
			cellpadding: "cellPadding",
			rowspan: "rowSpan",
			colspan: "colSpan",
			usemap: "useMap",
			frameborder: "frameBorder",
			contenteditable: "contentEditable"
		},
		prop: function(e, n, r) {
			var i, o, a, s = e.nodeType;
			if(e && 3 !== s && 8 !== s && 2 !== s) return a = 1 !== s || !H.isXMLDoc(e), a && (n = H.propFix[n] || n, o = H.propHooks[n]), r !== t ? o && "set" in o && (i = o.set(e, r, n)) !== t ? i : e[n] = r : o && "get" in o && null !== (i = o.get(e, n)) ? i : e[n]
		},
		propHooks: {
			tabIndex: {
				get: function(e) {
					var n = e.getAttributeNode("tabindex");
					return n && n.specified ? parseInt(n.value, 10) : U.test(e.nodeName) || G.test(e.nodeName) && e.href ? 0 : t
				}
			}
		}
	}), H.attrHooks.tabindex = H.propHooks.tabIndex, I = {
		get: function(e, n) {
			var r, i = H.prop(e, n);
			return i === !0 || "boolean" != typeof i && (r = e.getAttributeNode(n)) && r.nodeValue !== !1 ? n.toLowerCase() : t
		},
		set: function(e, t, n) {
			var r;
			return t === !1 ? H.removeAttr(e, n) : (r = H.propFix[n] || n, r in e && (e[r] = !0), e.setAttribute(n, n.toLowerCase())), n
		}
	}, J || ($ = {
		name: !0,
		id: !0,
		coords: !0
	}, W = H.valHooks.button = {
		get: function(e, n) {
			var r;
			return r = e.getAttributeNode(n), r && ($[n] ? "" !== r.nodeValue : r.specified) ? r.nodeValue : t
		},
		set: function(e, t, n) {
			var r = e.getAttributeNode(n);
			return r || (r = F.createAttribute(n), e.setAttributeNode(r)), r.nodeValue = t + ""
		}
	}, H.attrHooks.tabindex.set = W.set, H.each(["width", "height"], function(e, t) {
		H.attrHooks[t] = H.extend(H.attrHooks[t], {
			set: function(e, n) {
				return "" === n ? (e.setAttribute(t, "auto"), n) : void 0
			}
		})
	}), H.attrHooks.contenteditable = {
		get: W.get,
		set: function(e, t, n) {
			"" === t && (t = "false"), W.set(e, t, n)
		}
	}), H.support.hrefNormalized || H.each(["href", "src", "width", "height"], function(e, n) {
		H.attrHooks[n] = H.extend(H.attrHooks[n], {
			get: function(e) {
				var r = e.getAttribute(n, 2);
				return null === r ? t : r
			}
		})
	}), H.support.style || (H.attrHooks.style = {
		get: function(e) {
			return e.style.cssText.toLowerCase() || t
		},
		set: function(e, t) {
			return e.style.cssText = "" + t
		}
	}), H.support.optSelected || (H.propHooks.selected = H.extend(H.propHooks.selected, {
		get: function(e) {
			var t = e.parentNode;
			return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null
		}
	})), H.support.enctype || (H.propFix.enctype = "encoding"), H.support.checkOn || H.each(["radio", "checkbox"], function() {
		H.valHooks[this] = {
			get: function(e) {
				return null === e.getAttribute("value") ? "on" : e.value
			}
		}
	}), H.each(["radio", "checkbox"], function() {
		H.valHooks[this] = H.extend(H.valHooks[this], {
			set: function(e, t) {
				return H.isArray(t) ? e.checked = H.inArray(H(e).val(), t) >= 0 : void 0
			}
		})
	});
	var Q = /^(?:textarea|input|select)$/i,
		K = /^([^\.]*)?(?:\.(.+))?$/,
		Z = /(?:^|\s)hover(\.\S+)?\b/,
		et = /^key/,
		tt = /^(?:mouse|contextmenu)|click/,
		nt = /^(?:focusinfocus|focusoutblur)$/,
		rt = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
		it = function(e) {
			var t = rt.exec(e);
			return t && (t[1] = (t[1] || "").toLowerCase(), t[3] = t[3] && new RegExp("(?:^|\\s)" + t[3] + "(?:\\s|$)")), t
		},
		ot = function(e, t) {
			var n = e.attributes || {};
			return !(t[1] && e.nodeName.toLowerCase() !== t[1] || t[2] && (n.id || {}).value !== t[2] || t[3] && !t[3].test((n["class"] || {}).value))
		},
		at = function(e) {
			return H.event.special.hover ? e : e.replace(Z, "mouseenter$1 mouseleave$1")
		};
	H.event = {
			add: function(e, n, r, i, o) {
				var a, s, l, u, c, f, d, p, h, m, g;
				if(3 !== e.nodeType && 8 !== e.nodeType && n && r && (a = H._data(e))) {
					for(r.handler && (h = r, r = h.handler, o = h.selector), r.guid || (r.guid = H.guid++), l = a.events, l || (a.events = l = {}), s = a.handle, s || (a.handle = s = function(e) {
							return "undefined" == typeof H || e && H.event.triggered === e.type ? t : H.event.dispatch.apply(s.elem, arguments)
						}, s.elem = e), n = H.trim(at(n)).split(" "), u = 0; u < n.length; u++) c = K.exec(n[u]) || [], f = c[1], d = (c[2] || "").split(".").sort(), g = H.event.special[f] || {}, f = (o ? g.delegateType : g.bindType) || f, g = H.event.special[f] || {}, p = H.extend({
						type: f,
						origType: c[1],
						data: i,
						handler: r,
						guid: r.guid,
						selector: o,
						quick: o && it(o),
						namespace: d.join(".")
					}, h), m = l[f], m || (m = l[f] = [], m.delegateCount = 0, g.setup && g.setup.call(e, i, d, s) !== !1 || (e.addEventListener ? e.addEventListener(f, s, !1) : e.attachEvent && e.attachEvent("on" + f, s))), g.add && (g.add.call(e, p), p.handler.guid || (p.handler.guid = r.guid)), o ? m.splice(m.delegateCount++, 0, p) : m.push(p), H.event.global[f] = !0;
					e = null
				}
			},
			global: {},
			remove: function(e, t, n, r, i) {
				var o, a, s, l, u, c, f, d, p, h, m, g, y = H.hasData(e) && H._data(e);
				if(y && (d = y.events)) {
					for(t = H.trim(at(t || "")).split(" "), o = 0; o < t.length; o++)
						if(a = K.exec(t[o]) || [], s = l = a[1], u = a[2], s) {
							for(p = H.event.special[s] || {}, s = (r ? p.delegateType : p.bindType) || s, m = d[s] || [], c = m.length, u = u ? new RegExp("(^|\\.)" + u.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null, f = 0; f < m.length; f++) g = m[f], !i && l !== g.origType || n && n.guid !== g.guid || u && !u.test(g.namespace) || r && r !== g.selector && ("**" !== r || !g.selector) || (m.splice(f--, 1), g.selector && m.delegateCount--, p.remove && p.remove.call(e, g));
							0 === m.length && c !== m.length && (p.teardown && p.teardown.call(e, u) !== !1 || H.removeEvent(e, s, y.handle), delete d[s])
						} else
							for(s in d) H.event.remove(e, s + t[o], n, r, !0);
					H.isEmptyObject(d) && (h = y.handle, h && (h.elem = null), H.removeData(e, ["events", "handle"], !0))
				}
			},
			customEvent: {
				getData: !0,
				setData: !0,
				changeData: !0
			},
			trigger: function(n, r, i, o) {
				if(!i || 3 !== i.nodeType && 8 !== i.nodeType) {
					var a, s, l, u, c, f, d, p, h, m, g = n.type || n,
						y = [];
					if(!nt.test(g + H.event.triggered) && (g.indexOf("!") >= 0 && (g = g.slice(0, -1), s = !0), g.indexOf(".") >= 0 && (y = g.split("."), g = y.shift(), y.sort()), i && !H.event.customEvent[g] || H.event.global[g]))
						if(n = "object" == typeof n ? n[H.expando] ? n : new H.Event(g, n) : new H.Event(g), n.type = g, n.isTrigger = !0, n.exclusive = s, n.namespace = y.join("."), n.namespace_re = n.namespace ? new RegExp("(^|\\.)" + y.join("\\.(?:.*\\.)?") + "(\\.|$)") : null, f = g.indexOf(":") < 0 ? "on" + g : "", i) {
							if(n.result = t, n.target || (n.target = i), r = null != r ? H.makeArray(r) : [], r.unshift(n), d = H.event.special[g] || {}, !d.trigger || d.trigger.apply(i, r) !== !1) {
								if(h = [
										[i, d.bindType || g]
									], !o && !d.noBubble && !H.isWindow(i)) {
									for(m = d.delegateType || g, u = nt.test(m + g) ? i : i.parentNode, c = null; u; u = u.parentNode) h.push([u, m]), c = u;
									c && c === i.ownerDocument && h.push([c.defaultView || c.parentWindow || e, m])
								}
								for(l = 0; l < h.length && !n.isPropagationStopped(); l++) u = h[l][0], n.type = h[l][1], p = (H._data(u, "events") || {})[n.type] && H._data(u, "handle"), p && p.apply(u, r), p = f && u[f], p && H.acceptData(u) && p.apply(u, r) === !1 && n.preventDefault();
								return n.type = g, o || n.isDefaultPrevented() || d._default && d._default.apply(i.ownerDocument, r) !== !1 || "click" === g && H.nodeName(i, "a") || !H.acceptData(i) || f && i[g] && ("focus" !== g && "blur" !== g || 0 !== n.target.offsetWidth) && !H.isWindow(i) && (c = i[f], c && (i[f] = null), H.event.triggered = g, i[g](), H.event.triggered = t, c && (i[f] = c)), n.result
							}
						} else {
							a = H.cache;
							for(l in a) a[l].events && a[l].events[g] && H.event.trigger(n, r, a[l].handle.elem, !0)
						}
				}
			},
			dispatch: function(n) {
				n = H.event.fix(n || e.event);
				var r, i, o, a, s, l, u, c, f, d, p = (H._data(this, "events") || {})[n.type] || [],
					h = p.delegateCount,
					m = [].slice.call(arguments, 0),
					g = !n.exclusive && !n.namespace,
					y = H.event.special[n.type] || {},
					v = [];
				if(m[0] = n, n.delegateTarget = this, !y.preDispatch || y.preDispatch.call(this, n) !== !1) {
					if(h && (!n.button || "click" !== n.type))
						for(a = H(this), a.context = this.ownerDocument || this, o = n.target; o != this; o = o.parentNode || this)
							if(o.disabled !== !0) {
								for(l = {}, c = [], a[0] = o, r = 0; h > r; r++) f = p[r], d = f.selector, l[d] === t && (l[d] = f.quick ? ot(o, f.quick) : a.is(d)), l[d] && c.push(f);
								c.length && v.push({
									elem: o,
									matches: c
								})
							}
					for(p.length > h && v.push({
							elem: this,
							matches: p.slice(h)
						}), r = 0; r < v.length && !n.isPropagationStopped(); r++)
						for(u = v[r], n.currentTarget = u.elem, i = 0; i < u.matches.length && !n.isImmediatePropagationStopped(); i++) f = u.matches[i], (g || !n.namespace && !f.namespace || n.namespace_re && n.namespace_re.test(f.namespace)) && (n.data = f.data, n.handleObj = f, s = ((H.event.special[f.origType] || {}).handle || f.handler).apply(u.elem, m), s !== t && (n.result = s, s === !1 && (n.preventDefault(), n.stopPropagation())));
					return y.postDispatch && y.postDispatch.call(this, n), n.result
				}
			},
			props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
			fixHooks: {},
			keyHooks: {
				props: "char charCode key keyCode".split(" "),
				filter: function(e, t) {
					return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode), e
				}
			},
			mouseHooks: {
				props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
				filter: function(e, n) {
					var r, i, o, a = n.button,
						s = n.fromElement;
					return null == e.pageX && null != n.clientX && (r = e.target.ownerDocument || F, i = r.documentElement, o = r.body, e.pageX = n.clientX + (i && i.scrollLeft || o && o.scrollLeft || 0) - (i && i.clientLeft || o && o.clientLeft || 0), e.pageY = n.clientY + (i && i.scrollTop || o && o.scrollTop || 0) - (i && i.clientTop || o && o.clientTop || 0)), !e.relatedTarget && s && (e.relatedTarget = s === e.target ? n.toElement : s), e.which || a === t || (e.which = 1 & a ? 1 : 2 & a ? 3 : 4 & a ? 2 : 0), e
				}
			},
			fix: function(e) {
				if(e[H.expando]) return e;
				var n, r, i = e,
					o = H.event.fixHooks[e.type] || {},
					a = o.props ? this.props.concat(o.props) : this.props;
				for(e = H.Event(i), n = a.length; n;) r = a[--n], e[r] = i[r];
				return e.target || (e.target = i.srcElement || F), 3 === e.target.nodeType && (e.target = e.target.parentNode), e.metaKey === t && (e.metaKey = e.ctrlKey), o.filter ? o.filter(e, i) : e
			},
			special: {
				ready: {
					setup: H.bindReady
				},
				load: {
					noBubble: !0
				},
				focus: {
					delegateType: "focusin"
				},
				blur: {
					delegateType: "focusout"
				},
				beforeunload: {
					setup: function(e, t, n) {
						H.isWindow(this) && (this.onbeforeunload = n)
					},
					teardown: function(e, t) {
						this.onbeforeunload === t && (this.onbeforeunload = null)
					}
				}
			},
			simulate: function(e, t, n, r) {
				var i = H.extend(new H.Event, n, {
					type: e,
					isSimulated: !0,
					originalEvent: {}
				});
				r ? H.event.trigger(i, null, t) : H.event.dispatch.call(t, i), i.isDefaultPrevented() && n.preventDefault()
			}
		}, H.event.handle = H.event.dispatch, H.removeEvent = F.removeEventListener ? function(e, t, n) {
			e.removeEventListener && e.removeEventListener(t, n, !1)
		} : function(e, t, n) {
			e.detachEvent && e.detachEvent("on" + t, n)
		}, H.Event = function(e, t) {
			return this instanceof H.Event ? (e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || e.returnValue === !1 || e.getPreventDefault && e.getPreventDefault() ? s : a) : this.type = e, t && H.extend(this, t), this.timeStamp = e && e.timeStamp || H.now(), this[H.expando] = !0, void 0) : new H.Event(e, t)
		}, H.Event.prototype = {
			preventDefault: function() {
				this.isDefaultPrevented = s;
				var e = this.originalEvent;
				e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1)
			},
			stopPropagation: function() {
				this.isPropagationStopped = s;
				var e = this.originalEvent;
				e && (e.stopPropagation && e.stopPropagation(), e.cancelBubble = !0)
			},
			stopImmediatePropagation: function() {
				this.isImmediatePropagationStopped = s, this.stopPropagation()
			},
			isDefaultPrevented: a,
			isPropagationStopped: a,
			isImmediatePropagationStopped: a
		}, H.each({
			mouseenter: "mouseover",
			mouseleave: "mouseout"
		}, function(e, t) {
			H.event.special[e] = {
				delegateType: t,
				bindType: t,
				handle: function(e) {
					{
						var n, r = this,
							i = e.relatedTarget,
							o = e.handleObj;
						o.selector
					}
					return(!i || i !== r && !H.contains(r, i)) && (e.type = o.origType, n = o.handler.apply(this, arguments), e.type = t), n
				}
			}
		}), H.support.submitBubbles || (H.event.special.submit = {
			setup: function() {
				return H.nodeName(this, "form") ? !1 : (H.event.add(this, "click._submit keypress._submit", function(e) {
					var n = e.target,
						r = H.nodeName(n, "input") || H.nodeName(n, "button") ? n.form : t;
					r && !r._submit_attached && (H.event.add(r, "submit._submit", function(e) {
						e._submit_bubble = !0
					}), r._submit_attached = !0)
				}), void 0)
			},
			postDispatch: function(e) {
				e._submit_bubble && (delete e._submit_bubble, this.parentNode && !e.isTrigger && H.event.simulate("submit", this.parentNode, e, !0))
			},
			teardown: function() {
				return H.nodeName(this, "form") ? !1 : (H.event.remove(this, "._submit"), void 0)
			}
		}), H.support.changeBubbles || (H.event.special.change = {
			setup: function() {
				return Q.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (H.event.add(this, "propertychange._change", function(e) {
					"checked" === e.originalEvent.propertyName && (this._just_changed = !0)
				}), H.event.add(this, "click._change", function(e) {
					this._just_changed && !e.isTrigger && (this._just_changed = !1, H.event.simulate("change", this, e, !0))
				})), !1) : (H.event.add(this, "beforeactivate._change", function(e) {
					var t = e.target;
					Q.test(t.nodeName) && !t._change_attached && (H.event.add(t, "change._change", function(e) {
						!this.parentNode || e.isSimulated || e.isTrigger || H.event.simulate("change", this.parentNode, e, !0)
					}), t._change_attached = !0)
				}), void 0)
			},
			handle: function(e) {
				var t = e.target;
				return this !== t || e.isSimulated || e.isTrigger || "radio" !== t.type && "checkbox" !== t.type ? e.handleObj.handler.apply(this, arguments) : void 0
			},
			teardown: function() {
				return H.event.remove(this, "._change"), Q.test(this.nodeName)
			}
		}), H.support.focusinBubbles || H.each({
			focus: "focusin",
			blur: "focusout"
		}, function(e, t) {
			var n = 0,
				r = function(e) {
					H.event.simulate(t, e.target, H.event.fix(e), !0)
				};
			H.event.special[t] = {
				setup: function() {
					0 === n++ && F.addEventListener(e, r, !0)
				},
				teardown: function() {
					0 === --n && F.removeEventListener(e, r, !0)
				}
			}
		}), H.fn.extend({
			on: function(e, n, r, i, o) {
				var s, l;
				if("object" == typeof e) {
					"string" != typeof n && (r = r || n, n = t);
					for(l in e) this.on(l, n, r, e[l], o);
					return this
				}
				if(null == r && null == i ? (i = n, r = n = t) : null == i && ("string" == typeof n ? (i = r, r = t) : (i = r, r = n, n = t)), i === !1) i = a;
				else if(!i) return this;
				return 1 === o && (s = i, i = function(e) {
					return H().off(e), s.apply(this, arguments)
				}, i.guid = s.guid || (s.guid = H.guid++)), this.each(function() {
					H.event.add(this, e, i, r, n)
				})
			},
			one: function(e, t, n, r) {
				return this.on(e, t, n, r, 1)
			},
			off: function(e, n, r) {
				if(e && e.preventDefault && e.handleObj) {
					var i = e.handleObj;
					return H(e.delegateTarget).off(i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), this
				}
				if("object" == typeof e) {
					for(var o in e) this.off(o, n, e[o]);
					return this
				}
				return(n === !1 || "function" == typeof n) && (r = n, n = t), r === !1 && (r = a), this.each(function() {
					H.event.remove(this, e, r, n)
				})
			},
			bind: function(e, t, n) {
				return this.on(e, null, t, n)
			},
			unbind: function(e, t) {
				return this.off(e, null, t)
			},
			live: function(e, t, n) {
				return H(this.context).on(e, this.selector, t, n), this
			},
			die: function(e, t) {
				return H(this.context).off(e, this.selector || "**", t), this
			},
			delegate: function(e, t, n, r) {
				return this.on(t, e, n, r)
			},
			undelegate: function(e, t, n) {
				return 1 == arguments.length ? this.off(e, "**") : this.off(t, e, n)
			},
			trigger: function(e, t) {
				return this.each(function() {
					H.event.trigger(e, t, this)
				})
			},
			triggerHandler: function(e, t) {
				return this[0] ? H.event.trigger(e, t, this[0], !0) : void 0
			},
			toggle: function(e) {
				var t = arguments,
					n = e.guid || H.guid++,
					r = 0,
					i = function(n) {
						var i = (H._data(this, "lastToggle" + e.guid) || 0) % r;
						return H._data(this, "lastToggle" + e.guid, i + 1), n.preventDefault(), t[i].apply(this, arguments) || !1
					};
				for(i.guid = n; r < t.length;) t[r++].guid = n;
				return this.click(i)
			},
			hover: function(e, t) {
				return this.mouseenter(e).mouseleave(t || e)
			}
		}), H.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(e, t) {
			H.fn[t] = function(e, n) {
				return null == n && (n = e, e = null), arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
			}, H.attrFn && (H.attrFn[t] = !0), et.test(t) && (H.event.fixHooks[t] = H.event.keyHooks), tt.test(t) && (H.event.fixHooks[t] = H.event.mouseHooks)
		}),
		function() {
			function e(e, t, n, r, o, a) {
				for(var s = 0, l = r.length; l > s; s++) {
					var u = r[s];
					if(u) {
						var c = !1;
						for(u = u[e]; u;) {
							if(u[i] === n) {
								c = r[u.sizset];
								break
							}
							if(1 !== u.nodeType || a || (u[i] = n, u.sizset = s), u.nodeName.toLowerCase() === t) {
								c = u;
								break
							}
							u = u[e]
						}
						r[s] = c
					}
				}
			}

			function n(e, t, n, r, o, a) {
				for(var s = 0, l = r.length; l > s; s++) {
					var u = r[s];
					if(u) {
						var c = !1;
						for(u = u[e]; u;) {
							if(u[i] === n) {
								c = r[u.sizset];
								break
							}
							if(1 === u.nodeType)
								if(a || (u[i] = n, u.sizset = s), "string" != typeof t) {
									if(u === t) {
										c = !0;
										break
									}
								} else if(d.filter(t, [u]).length > 0) {
								c = u;
								break
							}
							u = u[e]
						}
						r[s] = c
					}
				}
			}
			var r = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
				i = "sizcache" + (Math.random() + "").replace(".", ""),
				o = 0,
				a = Object.prototype.toString,
				s = !1,
				l = !0,
				u = /\\/g,
				c = /\r\n/g,
				f = /\W/;
			[0, 0].sort(function() {
				return l = !1, 0
			});
			var d = function(e, t, n, i) {
				n = n || [], t = t || F;
				var o = t;
				if(1 !== t.nodeType && 9 !== t.nodeType) return [];
				if(!e || "string" != typeof e) return n;
				var s, l, u, c, f, p, g, y, b = !0,
					x = d.isXML(t),
					T = [],
					N = e;
				do
					if(r.exec(""), s = r.exec(N), s && (N = s[3], T.push(s[1]), s[2])) {
						c = s[3];
						break
					}
				while(s);
				if(T.length > 1 && m.exec(e))
					if(2 === T.length && h.relative[T[0]]) l = w(T[0] + T[1], t, i);
					else
						for(l = h.relative[T[0]] ? [t] : d(T.shift(), t); T.length;) e = T.shift(), h.relative[e] && (e += T.shift()), l = w(e, l, i);
				else if(!i && T.length > 1 && 9 === t.nodeType && !x && h.match.ID.test(T[0]) && !h.match.ID.test(T[T.length - 1]) && (f = d.find(T.shift(), t, x), t = f.expr ? d.filter(f.expr, f.set)[0] : f.set[0]), t)
					for(f = i ? {
							expr: T.pop(),
							set: v(i)
						} : d.find(T.pop(), 1 !== T.length || "~" !== T[0] && "+" !== T[0] || !t.parentNode ? t : t.parentNode, x), l = f.expr ? d.filter(f.expr, f.set) : f.set, T.length > 0 ? u = v(l) : b = !1; T.length;) p = T.pop(), g = p, h.relative[p] ? g = T.pop() : p = "", null == g && (g = t), h.relative[p](u, g, x);
				else u = T = [];
				if(u || (u = l), u || d.error(p || e), "[object Array]" === a.call(u))
					if(b)
						if(t && 1 === t.nodeType)
							for(y = 0; null != u[y]; y++) u[y] && (u[y] === !0 || 1 === u[y].nodeType && d.contains(t, u[y])) && n.push(l[y]);
						else
							for(y = 0; null != u[y]; y++) u[y] && 1 === u[y].nodeType && n.push(l[y]);
				else n.push.apply(n, u);
				else v(u, n);
				return c && (d(c, o, n, i), d.uniqueSort(n)), n
			};
			d.uniqueSort = function(e) {
				if(x && (s = l, e.sort(x), s))
					for(var t = 1; t < e.length; t++) e[t] === e[t - 1] && e.splice(t--, 1);
				return e
			}, d.matches = function(e, t) {
				return d(e, null, null, t)
			}, d.matchesSelector = function(e, t) {
				return d(t, null, null, [e]).length > 0
			}, d.find = function(e, t, n) {
				var r, i, o, a, s, l;
				if(!e) return [];
				for(i = 0, o = h.order.length; o > i; i++)
					if(s = h.order[i], (a = h.leftMatch[s].exec(e)) && (l = a[1], a.splice(1, 1), "\\" !== l.substr(l.length - 1) && (a[1] = (a[1] || "").replace(u, ""), r = h.find[s](a, t, n), null != r))) {
						e = e.replace(h.match[s], "");
						break
					}
				return r || (r = "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName("*") : []), {
					set: r,
					expr: e
				}
			}, d.filter = function(e, n, r, i) {
				for(var o, a, s, l, u, c, f, p, m, g = e, y = [], v = n, b = n && n[0] && d.isXML(n[0]); e && n.length;) {
					for(s in h.filter)
						if(null != (o = h.leftMatch[s].exec(e)) && o[2]) {
							if(c = h.filter[s], f = o[1], a = !1, o.splice(1, 1), "\\" === f.substr(f.length - 1)) continue;
							if(v === y && (y = []), h.preFilter[s])
								if(o = h.preFilter[s](o, v, r, y, i, b)) {
									if(o === !0) continue
								} else a = l = !0;
							if(o)
								for(p = 0; null != (u = v[p]); p++) u && (l = c(u, o, p, v), m = i ^ l, r && null != l ? m ? a = !0 : v[p] = !1 : m && (y.push(u), a = !0));
							if(l !== t) {
								if(r || (v = y), e = e.replace(h.match[s], ""), !a) return [];
								break
							}
						}
					if(e === g) {
						if(null != a) break;
						d.error(e)
					}
					g = e
				}
				return v
			}, d.error = function(e) {
				throw new Error("Syntax error, unrecognized expression: " + e)
			};
			var p = d.getText = function(e) {
					var t, n, r = e.nodeType,
						i = "";
					if(r) {
						if(1 === r || 9 === r || 11 === r) {
							if("string" == typeof e.textContent) return e.textContent;
							if("string" == typeof e.innerText) return e.innerText.replace(c, "");
							for(e = e.firstChild; e; e = e.nextSibling) i += p(e)
						} else if(3 === r || 4 === r) return e.nodeValue
					} else
						for(t = 0; n = e[t]; t++) 8 !== n.nodeType && (i += p(n));
					return i
				},
				h = d.selectors = {
					order: ["ID", "NAME", "TAG"],
					match: {
						ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
						CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
						NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
						ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
						TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
						CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
						POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
						PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
					},
					leftMatch: {},
					attrMap: {
						"class": "className",
						"for": "htmlFor"
					},
					attrHandle: {
						href: function(e) {
							return e.getAttribute("href")
						},
						type: function(e) {
							return e.getAttribute("type")
						}
					},
					relative: {
						"+": function(e, t) {
							var n = "string" == typeof t,
								r = n && !f.test(t),
								i = n && !r;
							r && (t = t.toLowerCase());
							for(var o, a = 0, s = e.length; s > a; a++)
								if(o = e[a]) {
									for(;
										(o = o.previousSibling) && 1 !== o.nodeType;);
									e[a] = i || o && o.nodeName.toLowerCase() === t ? o || !1 : o === t
								}
							i && d.filter(t, e, !0)
						},
						">": function(e, t) {
							var n, r = "string" == typeof t,
								i = 0,
								o = e.length;
							if(r && !f.test(t)) {
								for(t = t.toLowerCase(); o > i; i++)
									if(n = e[i]) {
										var a = n.parentNode;
										e[i] = a.nodeName.toLowerCase() === t ? a : !1
									}
							} else {
								for(; o > i; i++) n = e[i], n && (e[i] = r ? n.parentNode : n.parentNode === t);
								r && d.filter(t, e, !0)
							}
						},
						"": function(t, r, i) {
							var a, s = o++,
								l = n;
							"string" != typeof r || f.test(r) || (r = r.toLowerCase(), a = r, l = e), l("parentNode", r, s, t, a, i)
						},
						"~": function(t, r, i) {
							var a, s = o++,
								l = n;
							"string" != typeof r || f.test(r) || (r = r.toLowerCase(), a = r, l = e), l("previousSibling", r, s, t, a, i)
						}
					},
					find: {
						ID: function(e, t, n) {
							if("undefined" != typeof t.getElementById && !n) {
								var r = t.getElementById(e[1]);
								return r && r.parentNode ? [r] : []
							}
						},
						NAME: function(e, t) {
							if("undefined" != typeof t.getElementsByName) {
								for(var n = [], r = t.getElementsByName(e[1]), i = 0, o = r.length; o > i; i++) r[i].getAttribute("name") === e[1] && n.push(r[i]);
								return 0 === n.length ? null : n
							}
						},
						TAG: function(e, t) {
							return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e[1]) : void 0
						}
					},
					preFilter: {
						CLASS: function(e, t, n, r, i, o) {
							if(e = " " + e[1].replace(u, "") + " ", o) return e;
							for(var a, s = 0; null != (a = t[s]); s++) a && (i ^ (a.className && (" " + a.className + " ").replace(/[\t\n\r]/g, " ").indexOf(e) >= 0) ? n || r.push(a) : n && (t[s] = !1));
							return !1
						},
						ID: function(e) {
							return e[1].replace(u, "")
						},
						TAG: function(e) {
							return e[1].replace(u, "").toLowerCase()
						},
						CHILD: function(e) {
							if("nth" === e[1]) {
								e[2] || d.error(e[0]), e[2] = e[2].replace(/^\+|\s*/g, "");
								var t = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec("even" === e[2] && "2n" || "odd" === e[2] && "2n+1" || !/\D/.test(e[2]) && "0n+" + e[2] || e[2]);
								e[2] = t[1] + (t[2] || 1) - 0, e[3] = t[3] - 0
							} else e[2] && d.error(e[0]);
							return e[0] = o++, e
						},
						ATTR: function(e, t, n, r, i, o) {
							var a = e[1] = e[1].replace(u, "");
							return !o && h.attrMap[a] && (e[1] = h.attrMap[a]), e[4] = (e[4] || e[5] || "").replace(u, ""), "~=" === e[2] && (e[4] = " " + e[4] + " "), e
						},
						PSEUDO: function(e, t, n, i, o) {
							if("not" === e[1]) {
								if(!((r.exec(e[3]) || "").length > 1 || /^\w/.test(e[3]))) {
									var a = d.filter(e[3], t, n, !0 ^ o);
									return n || i.push.apply(i, a), !1
								}
								e[3] = d(e[3], null, null, t)
							} else if(h.match.POS.test(e[0]) || h.match.CHILD.test(e[0])) return !0;
							return e
						},
						POS: function(e) {
							return e.unshift(!0), e
						}
					},
					filters: {
						enabled: function(e) {
							return e.disabled === !1 && "hidden" !== e.type
						},
						disabled: function(e) {
							return e.disabled === !0
						},
						checked: function(e) {
							return e.checked === !0
						},
						selected: function(e) {
							return e.parentNode && e.parentNode.selectedIndex, e.selected === !0
						},
						parent: function(e) {
							return !!e.firstChild
						},
						empty: function(e) {
							return !e.firstChild
						},
						has: function(e, t, n) {
							return !!d(n[3], e).length
						},
						header: function(e) {
							return /h\d/i.test(e.nodeName)
						},
						text: function(e) {
							var t = e.getAttribute("type"),
								n = e.type;
							return "input" === e.nodeName.toLowerCase() && "text" === n && (t === n || null === t)
						},
						radio: function(e) {
							return "input" === e.nodeName.toLowerCase() && "radio" === e.type
						},
						checkbox: function(e) {
							return "input" === e.nodeName.toLowerCase() && "checkbox" === e.type
						},
						file: function(e) {
							return "input" === e.nodeName.toLowerCase() && "file" === e.type
						},
						password: function(e) {
							return "input" === e.nodeName.toLowerCase() && "password" === e.type
						},
						submit: function(e) {
							var t = e.nodeName.toLowerCase();
							return("input" === t || "button" === t) && "submit" === e.type
						},
						image: function(e) {
							return "input" === e.nodeName.toLowerCase() && "image" === e.type
						},
						reset: function(e) {
							var t = e.nodeName.toLowerCase();
							return("input" === t || "button" === t) && "reset" === e.type
						},
						button: function(e) {
							var t = e.nodeName.toLowerCase();
							return "input" === t && "button" === e.type || "button" === t
						},
						input: function(e) {
							return /input|select|textarea|button/i.test(e.nodeName)
						},
						focus: function(e) {
							return e === e.ownerDocument.activeElement
						}
					},
					setFilters: {
						first: function(e, t) {
							return 0 === t
						},
						last: function(e, t, n, r) {
							return t === r.length - 1
						},
						even: function(e, t) {
							return t % 2 === 0
						},
						odd: function(e, t) {
							return t % 2 === 1
						},
						lt: function(e, t, n) {
							return t < n[3] - 0
						},
						gt: function(e, t, n) {
							return t > n[3] - 0
						},
						nth: function(e, t, n) {
							return n[3] - 0 === t
						},
						eq: function(e, t, n) {
							return n[3] - 0 === t
						}
					},
					filter: {
						PSEUDO: function(e, t, n, r) {
							var i = t[1],
								o = h.filters[i];
							if(o) return o(e, n, t, r);
							if("contains" === i) return(e.textContent || e.innerText || p([e]) || "").indexOf(t[3]) >= 0;
							if("not" === i) {
								for(var a = t[3], s = 0, l = a.length; l > s; s++)
									if(a[s] === e) return !1;
								return !0
							}
							d.error(i)
						},
						CHILD: function(e, t) {
							var n, r, o, a, s, l, u = t[1],
								c = e;
							switch(u) {
								case "only":
								case "first":
									for(; c = c.previousSibling;)
										if(1 === c.nodeType) return !1;
									if("first" === u) return !0;
									c = e;
								case "last":
									for(; c = c.nextSibling;)
										if(1 === c.nodeType) return !1;
									return !0;
								case "nth":
									if(n = t[2], r = t[3], 1 === n && 0 === r) return !0;
									if(o = t[0], a = e.parentNode, a && (a[i] !== o || !e.nodeIndex)) {
										for(s = 0, c = a.firstChild; c; c = c.nextSibling) 1 === c.nodeType && (c.nodeIndex = ++s);
										a[i] = o
									}
									return l = e.nodeIndex - r, 0 === n ? 0 === l : l % n === 0 && l / n >= 0
							}
						},
						ID: function(e, t) {
							return 1 === e.nodeType && e.getAttribute("id") === t
						},
						TAG: function(e, t) {
							return "*" === t && 1 === e.nodeType || !!e.nodeName && e.nodeName.toLowerCase() === t
						},
						CLASS: function(e, t) {
							return(" " + (e.className || e.getAttribute("class")) + " ").indexOf(t) > -1
						},
						ATTR: function(e, t) {
							var n = t[1],
								r = d.attr ? d.attr(e, n) : h.attrHandle[n] ? h.attrHandle[n](e) : null != e[n] ? e[n] : e.getAttribute(n),
								i = r + "",
								o = t[2],
								a = t[4];
							return null == r ? "!=" === o : !o && d.attr ? null != r : "=" === o ? i === a : "*=" === o ? i.indexOf(a) >= 0 : "~=" === o ? (" " + i + " ").indexOf(a) >= 0 : a ? "!=" === o ? i !== a : "^=" === o ? 0 === i.indexOf(a) : "$=" === o ? i.substr(i.length - a.length) === a : "|=" === o ? i === a || i.substr(0, a.length + 1) === a + "-" : !1 : i && r !== !1
						},
						POS: function(e, t, n, r) {
							var i = t[2],
								o = h.setFilters[i];
							return o ? o(e, n, t, r) : void 0
						}
					}
				},
				m = h.match.POS,
				g = function(e, t) {
					return "\\" + (t - 0 + 1)
				};
			for(var y in h.match) h.match[y] = new RegExp(h.match[y].source + /(?![^\[]*\])(?![^\(]*\))/.source), h.leftMatch[y] = new RegExp(/(^(?:.|\r|\n)*?)/.source + h.match[y].source.replace(/\\(\d+)/g, g));
			h.match.globalPOS = m;
			var v = function(e, t) {
				return e = Array.prototype.slice.call(e, 0), t ? (t.push.apply(t, e), t) : e
			};
			try {
				Array.prototype.slice.call(F.documentElement.childNodes, 0)[0].nodeType
			} catch(b) {
				v = function(e, t) {
					var n = 0,
						r = t || [];
					if("[object Array]" === a.call(e)) Array.prototype.push.apply(r, e);
					else if("number" == typeof e.length)
						for(var i = e.length; i > n; n++) r.push(e[n]);
					else
						for(; e[n]; n++) r.push(e[n]);
					return r
				}
			}
			var x, T;
			F.documentElement.compareDocumentPosition ? x = function(e, t) {
					return e === t ? (s = !0, 0) : e.compareDocumentPosition && t.compareDocumentPosition ? 4 & e.compareDocumentPosition(t) ? -1 : 1 : e.compareDocumentPosition ? -1 : 1
				} : (x = function(e, t) {
					if(e === t) return s = !0, 0;
					if(e.sourceIndex && t.sourceIndex) return e.sourceIndex - t.sourceIndex;
					var n, r, i = [],
						o = [],
						a = e.parentNode,
						l = t.parentNode,
						u = a;
					if(a === l) return T(e, t);
					if(!a) return -1;
					if(!l) return 1;
					for(; u;) i.unshift(u), u = u.parentNode;
					for(u = l; u;) o.unshift(u), u = u.parentNode;
					n = i.length, r = o.length;
					for(var c = 0; n > c && r > c; c++)
						if(i[c] !== o[c]) return T(i[c], o[c]);
					return c === n ? T(e, o[c], -1) : T(i[c], t, 1)
				}, T = function(e, t, n) {
					if(e === t) return n;
					for(var r = e.nextSibling; r;) {
						if(r === t) return -1;
						r = r.nextSibling
					}
					return 1
				}),
				function() {
					var e = F.createElement("div"),
						n = "script" + (new Date).getTime(),
						r = F.documentElement;
					e.innerHTML = "<a name='" + n + "'/>", r.insertBefore(e, r.firstChild), F.getElementById(n) && (h.find.ID = function(e, n, r) {
						if("undefined" != typeof n.getElementById && !r) {
							var i = n.getElementById(e[1]);
							return i ? i.id === e[1] || "undefined" != typeof i.getAttributeNode && i.getAttributeNode("id").nodeValue === e[1] ? [i] : t : []
						}
					}, h.filter.ID = function(e, t) {
						var n = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id");
						return 1 === e.nodeType && n && n.nodeValue === t
					}), r.removeChild(e), r = e = null
				}(),
				function() {
					var e = F.createElement("div");
					e.appendChild(F.createComment("")), e.getElementsByTagName("*").length > 0 && (h.find.TAG = function(e, t) {
						var n = t.getElementsByTagName(e[1]);
						if("*" === e[1]) {
							for(var r = [], i = 0; n[i]; i++) 1 === n[i].nodeType && r.push(n[i]);
							n = r
						}
						return n
					}), e.innerHTML = "<a href='#'></a>", e.firstChild && "undefined" != typeof e.firstChild.getAttribute && "#" !== e.firstChild.getAttribute("href") && (h.attrHandle.href = function(e) {
						return e.getAttribute("href", 2)
					}), e = null
				}(), F.querySelectorAll && ! function() {
					var e = d,
						t = F.createElement("div"),
						n = "__sizzle__";
					if(t.innerHTML = "<p class='TEST'></p>", !t.querySelectorAll || 0 !== t.querySelectorAll(".TEST").length) {
						d = function(t, r, i, o) {
							if(r = r || F, !o && !d.isXML(r)) {
								var a = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(t);
								if(a && (1 === r.nodeType || 9 === r.nodeType)) {
									if(a[1]) return v(r.getElementsByTagName(t), i);
									if(a[2] && h.find.CLASS && r.getElementsByClassName) return v(r.getElementsByClassName(a[2]), i)
								}
								if(9 === r.nodeType) {
									if("body" === t && r.body) return v([r.body], i);
									if(a && a[3]) {
										var s = r.getElementById(a[3]);
										if(!s || !s.parentNode) return v([], i);
										if(s.id === a[3]) return v([s], i)
									}
									try {
										return v(r.querySelectorAll(t), i)
									} catch(l) {}
								} else if(1 === r.nodeType && "object" !== r.nodeName.toLowerCase()) {
									var u = r,
										c = r.getAttribute("id"),
										f = c || n,
										p = r.parentNode,
										m = /^\s*[+~]/.test(t);
									c ? f = f.replace(/'/g, "\\$&") : r.setAttribute("id", f), m && p && (r = r.parentNode);
									try {
										if(!m || p) return v(r.querySelectorAll("[id='" + f + "'] " + t), i)
									} catch(g) {} finally {
										c || u.removeAttribute("id")
									}
								}
							}
							return e(t, r, i, o)
						};
						for(var r in e) d[r] = e[r];
						t = null
					}
				}(),
				function() {
					var e = F.documentElement,
						t = e.matchesSelector || e.mozMatchesSelector || e.webkitMatchesSelector || e.msMatchesSelector;
					if(t) {
						var n = !t.call(F.createElement("div"), "div"),
							r = !1;
						try {
							t.call(F.documentElement, "[test!='']:sizzle")
						} catch(i) {
							r = !0
						}
						d.matchesSelector = function(e, i) {
							if(i = i.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"), !d.isXML(e)) try {
								if(r || !h.match.PSEUDO.test(i) && !/!=/.test(i)) {
									var o = t.call(e, i);
									if(o || !n || e.document && 11 !== e.document.nodeType) return o
								}
							} catch(a) {}
							return d(i, null, null, [e]).length > 0
						}
					}
				}(),
				function() {
					var e = F.createElement("div");
					e.innerHTML = "<div class='test e'></div><div class='test'></div>", e.getElementsByClassName && 0 !== e.getElementsByClassName("e").length && (e.lastChild.className = "e", 1 !== e.getElementsByClassName("e").length && (h.order.splice(1, 0, "CLASS"), h.find.CLASS = function(e, t, n) {
						return "undefined" == typeof t.getElementsByClassName || n ? void 0 : t.getElementsByClassName(e[1])
					}, e = null))
				}(), d.contains = F.documentElement.contains ? function(e, t) {
					return e !== t && (e.contains ? e.contains(t) : !0)
				} : F.documentElement.compareDocumentPosition ? function(e, t) {
					return !!(16 & e.compareDocumentPosition(t))
				} : function() {
					return !1
				}, d.isXML = function(e) {
					var t = (e ? e.ownerDocument || e : 0).documentElement;
					return t ? "HTML" !== t.nodeName : !1
				};
			var w = function(e, t, n) {
				for(var r, i = [], o = "", a = t.nodeType ? [t] : t; r = h.match.PSEUDO.exec(e);) o += r[0], e = e.replace(h.match.PSEUDO, "");
				e = h.relative[e] ? e + "*" : e;
				for(var s = 0, l = a.length; l > s; s++) d(e, a[s], i, n);
				return d.filter(o, i)
			};
			d.attr = H.attr, d.selectors.attrMap = {}, H.find = d, H.expr = d.selectors, H.expr[":"] = H.expr.filters, H.unique = d.uniqueSort, H.text = d.getText, H.isXMLDoc = d.isXML, H.contains = d.contains
		}();
	var st = /Until$/,
		lt = /^(?:parents|prevUntil|prevAll)/,
		ut = /,/,
		ct = /^.[^:#\[\.,]*$/,
		ft = Array.prototype.slice,
		dt = H.expr.match.globalPOS,
		pt = {
			children: !0,
			contents: !0,
			next: !0,
			prev: !0
		};
	H.fn.extend({
		find: function(e) {
			var t, n, r = this;
			if("string" != typeof e) return H(e).filter(function() {
				for(t = 0, n = r.length; n > t; t++)
					if(H.contains(r[t], this)) return !0
			});
			var i, o, a, s = this.pushStack("", "find", e);
			for(t = 0, n = this.length; n > t; t++)
				if(i = s.length, H.find(e, this[t], s), t > 0)
					for(o = i; o < s.length; o++)
						for(a = 0; i > a; a++)
							if(s[a] === s[o]) {
								s.splice(o--, 1);
								break
							}
			return s
		},
		has: function(e) {
			var t = H(e);
			return this.filter(function() {
				for(var e = 0, n = t.length; n > e; e++)
					if(H.contains(this, t[e])) return !0
			})
		},
		not: function(e) {
			return this.pushStack(u(this, e, !1), "not", e)
		},
		filter: function(e) {
			return this.pushStack(u(this, e, !0), "filter", e)
		},
		is: function(e) {
			return !!e && ("string" == typeof e ? dt.test(e) ? H(e, this.context).index(this[0]) >= 0 : H.filter(e, this).length > 0 : this.filter(e).length > 0)
		},
		closest: function(e, t) {
			var n, r, i = [],
				o = this[0];
			if(H.isArray(e)) {
				for(var a = 1; o && o.ownerDocument && o !== t;) {
					for(n = 0; n < e.length; n++) H(o).is(e[n]) && i.push({
						selector: e[n],
						elem: o,
						level: a
					});
					o = o.parentNode, a++
				}
				return i
			}
			var s = dt.test(e) || "string" != typeof e ? H(e, t || this.context) : 0;
			for(n = 0, r = this.length; r > n; n++)
				for(o = this[n]; o;) {
					if(s ? s.index(o) > -1 : H.find.matchesSelector(o, e)) {
						i.push(o);
						break
					}
					if(o = o.parentNode, !o || !o.ownerDocument || o === t || 11 === o.nodeType) break
				}
			return i = i.length > 1 ? H.unique(i) : i, this.pushStack(i, "closest", e)
		},
		index: function(e) {
			return e ? "string" == typeof e ? H.inArray(this[0], H(e)) : H.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.prevAll().length : -1
		},
		add: function(e, t) {
			var n = "string" == typeof e ? H(e, t) : H.makeArray(e && e.nodeType ? [e] : e),
				r = H.merge(this.get(), n);
			return this.pushStack(l(n[0]) || l(r[0]) ? r : H.unique(r))
		},
		andSelf: function() {
			return this.add(this.prevObject)
		}
	}), H.each({
		parent: function(e) {
			var t = e.parentNode;
			return t && 11 !== t.nodeType ? t : null
		},
		parents: function(e) {
			return H.dir(e, "parentNode")
		},
		parentsUntil: function(e, t, n) {
			return H.dir(e, "parentNode", n)
		},
		next: function(e) {
			return H.nth(e, 2, "nextSibling")
		},
		prev: function(e) {
			return H.nth(e, 2, "previousSibling")
		},
		nextAll: function(e) {
			return H.dir(e, "nextSibling")
		},
		prevAll: function(e) {
			return H.dir(e, "previousSibling")
		},
		nextUntil: function(e, t, n) {
			return H.dir(e, "nextSibling", n)
		},
		prevUntil: function(e, t, n) {
			return H.dir(e, "previousSibling", n)
		},
		siblings: function(e) {
			return H.sibling((e.parentNode || {}).firstChild, e)
		},
		children: function(e) {
			return H.sibling(e.firstChild)
		},
		contents: function(e) {
			return H.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document : H.makeArray(e.childNodes)
		}
	}, function(e, t) {
		H.fn[e] = function(n, r) {
			var i = H.map(this, t, n);
			return st.test(e) || (r = n), r && "string" == typeof r && (i = H.filter(r, i)), i = this.length > 1 && !pt[e] ? H.unique(i) : i, (this.length > 1 || ut.test(r)) && lt.test(e) && (i = i.reverse()), this.pushStack(i, e, ft.call(arguments).join(","))
		}
	}), H.extend({
		filter: function(e, t, n) {
			return n && (e = ":not(" + e + ")"), 1 === t.length ? H.find.matchesSelector(t[0], e) ? [t[0]] : [] : H.find.matches(e, t)
		},
		dir: function(e, n, r) {
			for(var i = [], o = e[n]; o && 9 !== o.nodeType && (r === t || 1 !== o.nodeType || !H(o).is(r));) 1 === o.nodeType && i.push(o), o = o[n];
			return i
		},
		nth: function(e, t, n) {
			t = t || 1;
			for(var r = 0; e && (1 !== e.nodeType || ++r !== t); e = e[n]);
			return e
		},
		sibling: function(e, t) {
			for(var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
			return n
		}
	});
	var ht = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
		mt = / jQuery\d+="(?:\d+|null)"/g,
		gt = /^\s+/,
		yt = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
		vt = /<([\w:]+)/,
		bt = /<tbody/i,
		xt = /<|&#?\w+;/,
		Tt = /<(?:script|style)/i,
		wt = /<(?:script|object|embed|option|style)/i,
		Nt = new RegExp("<(?:" + ht + ")[\\s/>]", "i"),
		Ct = /checked\s*(?:[^=]|=\s*.checked.)/i,
		Et = /\/(java|ecma)script/i,
		kt = /^\s*<!(?:\[CDATA\[|\-\-)/,
		St = {
			option: [1, "<select multiple='multiple'>", "</select>"],
			legend: [1, "<fieldset>", "</fieldset>"],
			thead: [1, "<table>", "</table>"],
			tr: [2, "<table><tbody>", "</tbody></table>"],
			td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
			col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
			area: [1, "<map>", "</map>"],
			_default: [0, "", ""]
		},
		At = c(F);
	St.optgroup = St.option, St.tbody = St.tfoot = St.colgroup = St.caption = St.thead, St.th = St.td, H.support.htmlSerialize || (St._default = [1, "div<div>", "</div>"]), H.fn.extend({
		text: function(e) {
			return H.access(this, function(e) {
				return e === t ? H.text(this) : this.empty().append((this[0] && this[0].ownerDocument || F).createTextNode(e))
			}, null, e, arguments.length)
		},
		wrapAll: function(e) {
			if(H.isFunction(e)) return this.each(function(t) {
				H(this).wrapAll(e.call(this, t))
			});
			if(this[0]) {
				var t = H(e, this[0].ownerDocument).eq(0).clone(!0);
				this[0].parentNode && t.insertBefore(this[0]), t.map(function() {
					for(var e = this; e.firstChild && 1 === e.firstChild.nodeType;) e = e.firstChild;
					return e
				}).append(this)
			}
			return this
		},
		wrapInner: function(e) {
			return H.isFunction(e) ? this.each(function(t) {
				H(this).wrapInner(e.call(this, t))
			}) : this.each(function() {
				var t = H(this),
					n = t.contents();
				n.length ? n.wrapAll(e) : t.append(e)
			})
		},
		wrap: function(e) {
			var t = H.isFunction(e);
			return this.each(function(n) {
				H(this).wrapAll(t ? e.call(this, n) : e)
			})
		},
		unwrap: function() {
			return this.parent().each(function() {
				H.nodeName(this, "body") || H(this).replaceWith(this.childNodes)
			}).end()
		},
		append: function() {
			return this.domManip(arguments, !0, function(e) {
				1 === this.nodeType && this.appendChild(e)
			})
		},
		prepend: function() {
			return this.domManip(arguments, !0, function(e) {
				1 === this.nodeType && this.insertBefore(e, this.firstChild)
			})
		},
		before: function() {
			if(this[0] && this[0].parentNode) return this.domManip(arguments, !1, function(e) {
				this.parentNode.insertBefore(e, this)
			});
			if(arguments.length) {
				var e = H.clean(arguments);
				return e.push.apply(e, this.toArray()), this.pushStack(e, "before", arguments)
			}
		},
		after: function() {
			if(this[0] && this[0].parentNode) return this.domManip(arguments, !1, function(e) {
				this.parentNode.insertBefore(e, this.nextSibling)
			});
			if(arguments.length) {
				var e = this.pushStack(this, "after", arguments);
				return e.push.apply(e, H.clean(arguments)), e
			}
		},
		remove: function(e, t) {
			for(var n, r = 0; null != (n = this[r]); r++)(!e || H.filter(e, [n]).length) && (t || 1 !== n.nodeType || (H.cleanData(n.getElementsByTagName("*")), H.cleanData([n])), n.parentNode && n.parentNode.removeChild(n));
			return this
		},
		empty: function() {
			for(var e, t = 0; null != (e = this[t]); t++)
				for(1 === e.nodeType && H.cleanData(e.getElementsByTagName("*")); e.firstChild;) e.removeChild(e.firstChild);
			return this
		},
		clone: function(e, t) {
			return e = null == e ? !1 : e, t = null == t ? e : t, this.map(function() {
				return H.clone(this, e, t)
			})
		},
		html: function(e) {
			return H.access(this, function(e) {
				var n = this[0] || {},
					r = 0,
					i = this.length;
				if(e === t) return 1 === n.nodeType ? n.innerHTML.replace(mt, "") : null;
				if(!("string" != typeof e || Tt.test(e) || !H.support.leadingWhitespace && gt.test(e) || St[(vt.exec(e) || ["", ""])[1].toLowerCase()])) {
					e = e.replace(yt, "<$1></$2>");
					try {
						for(; i > r; r++) n = this[r] || {}, 1 === n.nodeType && (H.cleanData(n.getElementsByTagName("*")), n.innerHTML = e);
						n = 0
					} catch(o) {}
				}
				n && this.empty().append(e)
			}, null, e, arguments.length)
		},
		replaceWith: function(e) {
			return this[0] && this[0].parentNode ? H.isFunction(e) ? this.each(function(t) {
				var n = H(this),
					r = n.html();
				n.replaceWith(e.call(this, t, r))
			}) : ("string" != typeof e && (e = H(e).detach()), this.each(function() {
				var t = this.nextSibling,
					n = this.parentNode;
				H(this).remove(), t ? H(t).before(e) : H(n).append(e)
			})) : this.length ? this.pushStack(H(H.isFunction(e) ? e() : e), "replaceWith", e) : this
		},
		detach: function(e) {
			return this.remove(e, !0)
		},
		domManip: function(e, n, r) {
			var i, o, a, s, l = e[0],
				u = [];
			if(!H.support.checkClone && 3 === arguments.length && "string" == typeof l && Ct.test(l)) return this.each(function() {
				H(this).domManip(e, n, r, !0)
			});
			if(H.isFunction(l)) return this.each(function(i) {
				var o = H(this);
				e[0] = l.call(this, i, n ? o.html() : t), o.domManip(e, n, r)
			});
			if(this[0]) {
				if(s = l && l.parentNode, i = H.support.parentNode && s && 11 === s.nodeType && s.childNodes.length === this.length ? {
						fragment: s
					} : H.buildFragment(e, this, u), a = i.fragment, o = 1 === a.childNodes.length ? a = a.firstChild : a.firstChild) {
					n = n && H.nodeName(o, "tr");
					for(var c = 0, d = this.length, p = d - 1; d > c; c++) r.call(n ? f(this[c], o) : this[c], i.cacheable || d > 1 && p > c ? H.clone(a, !0, !0) : a)
				}
				u.length && H.each(u, function(e, t) {
					t.src ? H.ajax({
						type: "GET",
						global: !1,
						url: t.src,
						async: !1,
						dataType: "script"
					}) : H.globalEval((t.text || t.textContent || t.innerHTML || "").replace(kt, "/*$0*/")), t.parentNode && t.parentNode.removeChild(t)
				})
			}
			return this
		}
	}), H.buildFragment = function(e, t, n) {
		var r, i, o, a, s = e[0];
		return t && t[0] && (a = t[0].ownerDocument || t[0]), a.createDocumentFragment || (a = F), !(1 === e.length && "string" == typeof s && s.length < 512 && a === F && "<" === s.charAt(0)) || wt.test(s) || !H.support.checkClone && Ct.test(s) || !H.support.html5Clone && Nt.test(s) || (i = !0, o = H.fragments[s], o && 1 !== o && (r = o)), r || (r = a.createDocumentFragment(), H.clean(e, a, r, n)), i && (H.fragments[s] = o ? r : 1), {
			fragment: r,
			cacheable: i
		}
	}, H.fragments = {}, H.each({
		appendTo: "append",
		prependTo: "prepend",
		insertBefore: "before",
		insertAfter: "after",
		replaceAll: "replaceWith"
	}, function(e, t) {
		H.fn[e] = function(n) {
			var r = [],
				i = H(n),
				o = 1 === this.length && this[0].parentNode;
			if(o && 11 === o.nodeType && 1 === o.childNodes.length && 1 === i.length) return i[t](this[0]), this;
			for(var a = 0, s = i.length; s > a; a++) {
				var l = (a > 0 ? this.clone(!0) : this).get();
				H(i[a])[t](l), r = r.concat(l)
			}
			return this.pushStack(r, e, i.selector)
		}
	}), H.extend({
		clone: function(e, t, n) {
			var r, i, o, a = H.support.html5Clone || H.isXMLDoc(e) || !Nt.test("<" + e.nodeName + ">") ? e.cloneNode(!0) : y(e);
			if(!(H.support.noCloneEvent && H.support.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || H.isXMLDoc(e)))
				for(p(e, a), r = h(e), i = h(a), o = 0; r[o]; ++o) i[o] && p(r[o], i[o]);
			if(t && (d(e, a), n))
				for(r = h(e), i = h(a), o = 0; r[o]; ++o) d(r[o], i[o]);
			return r = i = null, a
		},
		clean: function(e, t, n, r) {
			var i, o, a, s = [];
			t = t || F, "undefined" == typeof t.createElement && (t = t.ownerDocument || t[0] && t[0].ownerDocument || F);
			for(var l, u = 0; null != (l = e[u]); u++)
				if("number" == typeof l && (l += ""), l) {
					if("string" == typeof l)
						if(xt.test(l)) {
							l = l.replace(yt, "<$1></$2>");
							var f, d = (vt.exec(l) || ["", ""])[1].toLowerCase(),
								p = St[d] || St._default,
								h = p[0],
								m = t.createElement("div"),
								y = At.childNodes;
							for(t === F ? At.appendChild(m) : c(t).appendChild(m), m.innerHTML = p[1] + l + p[2]; h--;) m = m.lastChild;
							if(!H.support.tbody) {
								var v = bt.test(l),
									b = "table" !== d || v ? "<table>" !== p[1] || v ? [] : m.childNodes : m.firstChild && m.firstChild.childNodes;
								for(a = b.length - 1; a >= 0; --a) H.nodeName(b[a], "tbody") && !b[a].childNodes.length && b[a].parentNode.removeChild(b[a])
							}!H.support.leadingWhitespace && gt.test(l) && m.insertBefore(t.createTextNode(gt.exec(l)[0]), m.firstChild), l = m.childNodes, m && (m.parentNode.removeChild(m), y.length > 0 && (f = y[y.length - 1], f && f.parentNode && f.parentNode.removeChild(f)))
						} else l = t.createTextNode(l);
					var x;
					if(!H.support.appendChecked)
						if(l[0] && "number" == typeof(x = l.length))
							for(a = 0; x > a; a++) g(l[a]);
						else g(l);
					l.nodeType ? s.push(l) : s = H.merge(s, l)
				}
			if(n)
				for(i = function(e) {
						return !e.type || Et.test(e.type)
					}, u = 0; s[u]; u++)
					if(o = s[u], r && H.nodeName(o, "script") && (!o.type || Et.test(o.type))) r.push(o.parentNode ? o.parentNode.removeChild(o) : o);
					else {
						if(1 === o.nodeType) {
							var T = H.grep(o.getElementsByTagName("script"), i);
							s.splice.apply(s, [u + 1, 0].concat(T))
						}
						n.appendChild(o)
					}
			return s
		},
		cleanData: function(e) {
			for(var t, n, r, i = H.cache, o = H.event.special, a = H.support.deleteExpando, s = 0; null != (r = e[s]); s++)
				if((!r.nodeName || !H.noData[r.nodeName.toLowerCase()]) && (n = r[H.expando])) {
					if(t = i[n], t && t.events) {
						for(var l in t.events) o[l] ? H.event.remove(r, l) : H.removeEvent(r, l, t.handle);
						t.handle && (t.handle.elem = null)
					}
					a ? delete r[H.expando] : r.removeAttribute && r.removeAttribute(H.expando), delete i[n]
				}
		}
	});
	var Lt, Dt, jt, Ft = /alpha\([^)]*\)/i,
		Mt = /opacity=([^)]*)/,
		_t = /([A-Z]|^ms)/g,
		Ht = /^[\-+]?(?:\d*\.)?\d+$/i,
		Ot = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
		Bt = /^([\-+])=([\-+.\de]+)/,
		Pt = /^margin/,
		qt = {
			position: "absolute",
			visibility: "hidden",
			display: "block"
		},
		Wt = ["Top", "Right", "Bottom", "Left"];
	H.fn.css = function(e, n) {
		return H.access(this, function(e, n, r) {
			return r !== t ? H.style(e, n, r) : H.css(e, n)
		}, e, n, arguments.length > 1)
	}, H.extend({
		cssHooks: {
			opacity: {
				get: function(e, t) {
					if(t) {
						var n = Lt(e, "opacity");
						return "" === n ? "1" : n
					}
					return e.style.opacity
				}
			}
		},
		cssNumber: {
			fillOpacity: !0,
			fontWeight: !0,
			lineHeight: !0,
			opacity: !0,
			orphans: !0,
			widows: !0,
			zIndex: !0,
			zoom: !0
		},
		cssProps: {
			"float": H.support.cssFloat ? "cssFloat" : "styleFloat"
		},
		style: function(e, n, r, i) {
			if(e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
				var o, a, s = H.camelCase(n),
					l = e.style,
					u = H.cssHooks[s];
				if(n = H.cssProps[s] || s, r === t) return u && "get" in u && (o = u.get(e, !1, i)) !== t ? o : l[n];
				if(a = typeof r, "string" === a && (o = Bt.exec(r)) && (r = +(o[1] + 1) * +o[2] + parseFloat(H.css(e, n)), a = "number"), !(null == r || "number" === a && isNaN(r) || ("number" !== a || H.cssNumber[s] || (r += "px"), u && "set" in u && (r = u.set(e, r)) === t))) try {
					l[n] = r
				} catch(c) {}
			}
		},
		css: function(e, n, r) {
			var i, o;
			return n = H.camelCase(n), o = H.cssHooks[n], n = H.cssProps[n] || n, "cssFloat" === n && (n = "float"), o && "get" in o && (i = o.get(e, !0, r)) !== t ? i : Lt ? Lt(e, n) : void 0
		},
		swap: function(e, t, n) {
			var r, i, o = {};
			for(i in t) o[i] = e.style[i], e.style[i] = t[i];
			r = n.call(e);
			for(i in t) e.style[i] = o[i];
			return r
		}
	}), H.curCSS = H.css, F.defaultView && F.defaultView.getComputedStyle && (Dt = function(e, t) {
		var n, r, i, o, a = e.style;
		return t = t.replace(_t, "-$1").toLowerCase(), (r = e.ownerDocument.defaultView) && (i = r.getComputedStyle(e, null)) && (n = i.getPropertyValue(t), "" !== n || H.contains(e.ownerDocument.documentElement, e) || (n = H.style(e, t))), !H.support.pixelMargin && i && Pt.test(t) && Ot.test(n) && (o = a.width, a.width = n, n = i.width, a.width = o), n
	}), F.documentElement.currentStyle && (jt = function(e, t) {
		var n, r, i, o = e.currentStyle && e.currentStyle[t],
			a = e.style;
		return null == o && a && (i = a[t]) && (o = i), Ot.test(o) && (n = a.left, r = e.runtimeStyle && e.runtimeStyle.left, r && (e.runtimeStyle.left = e.currentStyle.left), a.left = "fontSize" === t ? "1em" : o, o = a.pixelLeft + "px", a.left = n, r && (e.runtimeStyle.left = r)), "" === o ? "auto" : o
	}), Lt = Dt || jt, H.each(["height", "width"], function(e, t) {
		H.cssHooks[t] = {
			get: function(e, n, r) {
				return n ? 0 !== e.offsetWidth ? v(e, t, r) : H.swap(e, qt, function() {
					return v(e, t, r)
				}) : void 0
			},
			set: function(e, t) {
				return Ht.test(t) ? t + "px" : t
			}
		}
	}), H.support.opacity || (H.cssHooks.opacity = {
		get: function(e, t) {
			return Mt.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? parseFloat(RegExp.$1) / 100 + "" : t ? "1" : ""
		},
		set: function(e, t) {
			var n = e.style,
				r = e.currentStyle,
				i = H.isNumeric(t) ? "alpha(opacity=" + 100 * t + ")" : "",
				o = r && r.filter || n.filter || "";
			n.zoom = 1, t >= 1 && "" === H.trim(o.replace(Ft, "")) && (n.removeAttribute("filter"), r && !r.filter) || (n.filter = Ft.test(o) ? o.replace(Ft, i) : o + " " + i)
		}
	}), H(function() {
		H.support.reliableMarginRight || (H.cssHooks.marginRight = {
			get: function(e, t) {
				return H.swap(e, {
					display: "inline-block"
				}, function() {
					return t ? Lt(e, "margin-right") : e.style.marginRight
				})
			}
		})
	}), H.expr && H.expr.filters && (H.expr.filters.hidden = function(e) {
		var t = e.offsetWidth,
			n = e.offsetHeight;
		return 0 === t && 0 === n || !H.support.reliableHiddenOffsets && "none" === (e.style && e.style.display || H.css(e, "display"))
	}, H.expr.filters.visible = function(e) {
		return !H.expr.filters.hidden(e)
	}), H.each({
		margin: "",
		padding: "",
		border: "Width"
	}, function(e, t) {
		H.cssHooks[e + t] = {
			expand: function(n) {
				var r, i = "string" == typeof n ? n.split(" ") : [n],
					o = {};
				for(r = 0; 4 > r; r++) o[e + Wt[r] + t] = i[r] || i[r - 2] || i[0];
				return o
			}
		}
	});
	var It, $t, Rt = /%20/g,
		Xt = /\[\]$/,
		zt = /\r?\n/g,
		Vt = /#.*$/,
		Ut = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
		Gt = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
		Yt = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
		Jt = /^(?:GET|HEAD)$/,
		Qt = /^\/\//,
		Kt = /\?/,
		Zt = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
		en = /^(?:select|textarea)/i,
		tn = /\s+/,
		nn = /([?&])_=[^&]*/,
		rn = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
		on = H.fn.load,
		an = {},
		sn = {},
		ln = ["*/"] + ["*"];
	try {
		It = _.href
	} catch(un) {
		It = F.createElement("a"), It.href = "", It = It.href
	}
	$t = rn.exec(It.toLowerCase()) || [], H.fn.extend({
		load: function(e, n, r) {
			if("string" != typeof e && on) return on.apply(this, arguments);
			if(!this.length) return this;
			var i = e.indexOf(" ");
			if(i >= 0) {
				var o = e.slice(i, e.length);
				e = e.slice(0, i)
			}
			var a = "GET";
			n && (H.isFunction(n) ? (r = n, n = t) : "object" == typeof n && (n = H.param(n, H.ajaxSettings.traditional), a = "POST"));
			var s = this;
			return H.ajax({
				url: e,
				type: a,
				dataType: "html",
				data: n,
				complete: function(e, t, n) {
					n = e.responseText, e.isResolved() && (e.done(function(e) {
						n = e
					}), s.html(o ? H("<div>").append(n.replace(Zt, "")).find(o) : n)), r && s.each(r, [n, t, e])
				}
			}), this
		},
		serialize: function() {
			return H.param(this.serializeArray())
		},
		serializeArray: function() {
			return this.map(function() {
				return this.elements ? H.makeArray(this.elements) : this
			}).filter(function() {
				return this.name && !this.disabled && (this.checked || en.test(this.nodeName) || Gt.test(this.type))
			}).map(function(e, t) {
				var n = H(this).val();
				return null == n ? null : H.isArray(n) ? H.map(n, function(e) {
					return {
						name: t.name,
						value: e.replace(zt, "\r\n")
					}
				}) : {
					name: t.name,
					value: n.replace(zt, "\r\n")
				}
			}).get()
		}
	}), H.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(e, t) {
		H.fn[t] = function(e) {
			return this.on(t, e)
		}
	}), H.each(["get", "post"], function(e, n) {
		H[n] = function(e, r, i, o) {
			return H.isFunction(r) && (o = o || i, i = r, r = t), H.ajax({
				type: n,
				url: e,
				data: r,
				success: i,
				dataType: o
			})
		}
	}), H.extend({
		getScript: function(e, n) {
			return H.get(e, t, n, "script")
		},
		getJSON: function(e, t, n) {
			return H.get(e, t, n, "json")
		},
		ajaxSetup: function(e, t) {
			return t ? T(e, H.ajaxSettings) : (t = e, e = H.ajaxSettings), T(e, t), e
		},
		ajaxSettings: {
			url: It,
			isLocal: Yt.test($t[1]),
			global: !0,
			type: "GET",
			contentType: "application/x-www-form-urlencoded; charset=UTF-8",
			processData: !0,
			async: !0,
			accepts: {
				xml: "application/xml, text/xml",
				html: "text/html",
				text: "text/plain",
				json: "application/json, text/javascript",
				"*": ln
			},
			contents: {
				xml: /xml/,
				html: /html/,
				json: /json/
			},
			responseFields: {
				xml: "responseXML",
				text: "responseText"
			},
			converters: {
				"* text": e.String,
				"text html": !0,
				"text json": H.parseJSON,
				"text xml": H.parseXML
			},
			flatOptions: {
				context: !0,
				url: !0
			}
		},
		ajaxPrefilter: b(an),
		ajaxTransport: b(sn),
		ajax: function(e, n) {
			function r(e, n, r, a) {
				if(2 !== T) {
					T = 2, l && clearTimeout(l), s = t, o = a || "", w.readyState = e > 0 ? 4 : 0;
					var u, f, v, b, x, E = n,
						k = r ? N(d, w, r) : t;
					if(e >= 200 && 300 > e || 304 === e)
						if(d.ifModified && ((b = w.getResponseHeader("Last-Modified")) && (H.lastModified[i] = b), (x = w.getResponseHeader("Etag")) && (H.etag[i] = x)), 304 === e) E = "notmodified", u = !0;
						else try {
							f = C(d, k), E = "success", u = !0
						} catch(S) {
							E = "parsererror", v = S
						} else v = E, (!E || e) && (E = "error", 0 > e && (e = 0));
					w.status = e, w.statusText = "" + (n || E), u ? m.resolveWith(p, [f, E, w]) : m.rejectWith(p, [w, E, v]), w.statusCode(y), y = t, c && h.trigger("ajax" + (u ? "Success" : "Error"), [w, d, u ? f : v]), g.fireWith(p, [w, E]), c && (h.trigger("ajaxComplete", [w, d]), --H.active || H.event.trigger("ajaxStop"))
				}
			}
			"object" == typeof e && (n = e, e = t), n = n || {};
			var i, o, a, s, l, u, c, f, d = H.ajaxSetup({}, n),
				p = d.context || d,
				h = p !== d && (p.nodeType || p instanceof H) ? H(p) : H.event,
				m = H.Deferred(),
				g = H.Callbacks("once memory"),
				y = d.statusCode || {},
				v = {},
				b = {},
				T = 0,
				w = {
					readyState: 0,
					setRequestHeader: function(e, t) {
						if(!T) {
							var n = e.toLowerCase();
							e = b[n] = b[n] || e, v[e] = t
						}
						return this
					},
					getAllResponseHeaders: function() {
						return 2 === T ? o : null
					},
					getResponseHeader: function(e) {
						var n;
						if(2 === T) {
							if(!a)
								for(a = {}; n = Ut.exec(o);) a[n[1].toLowerCase()] = n[2];
							n = a[e.toLowerCase()]
						}
						return n === t ? null : n
					},
					overrideMimeType: function(e) {
						return T || (d.mimeType = e), this
					},
					abort: function(e) {
						return e = e || "abort", s && s.abort(e), r(0, e), this
					}
				};
			if(m.promise(w), w.success = w.done, w.error = w.fail, w.complete = g.add, w.statusCode = function(e) {
					if(e) {
						var t;
						if(2 > T)
							for(t in e) y[t] = [y[t], e[t]];
						else t = e[w.status], w.then(t, t)
					}
					return this
				}, d.url = ((e || d.url) + "").replace(Vt, "").replace(Qt, $t[1] + "//"), d.dataTypes = H.trim(d.dataType || "*").toLowerCase().split(tn), null == d.crossDomain && (u = rn.exec(d.url.toLowerCase()), d.crossDomain = !(!u || u[1] == $t[1] && u[2] == $t[2] && (u[3] || ("http:" === u[1] ? 80 : 443)) == ($t[3] || ("http:" === $t[1] ? 80 : 443)))), d.data && d.processData && "string" != typeof d.data && (d.data = H.param(d.data, d.traditional)), x(an, d, n, w), 2 === T) return !1;
			if(c = d.global, d.type = d.type.toUpperCase(), d.hasContent = !Jt.test(d.type), c && 0 === H.active++ && H.event.trigger("ajaxStart"), !d.hasContent && (d.data && (d.url += (Kt.test(d.url) ? "&" : "?") + d.data, delete d.data), i = d.url, d.cache === !1)) {
				var E = H.now(),
					k = d.url.replace(nn, "$1_=" + E);
				d.url = k + (k === d.url ? (Kt.test(d.url) ? "&" : "?") + "_=" + E : "")
			}(d.data && d.hasContent && d.contentType !== !1 || n.contentType) && w.setRequestHeader("Content-Type", d.contentType), d.ifModified && (i = i || d.url, H.lastModified[i] && w.setRequestHeader("If-Modified-Since", H.lastModified[i]), H.etag[i] && w.setRequestHeader("If-None-Match", H.etag[i])), w.setRequestHeader("Accept", d.dataTypes[0] && d.accepts[d.dataTypes[0]] ? d.accepts[d.dataTypes[0]] + ("*" !== d.dataTypes[0] ? ", " + ln + "; q=0.01" : "") : d.accepts["*"]);
			for(f in d.headers) w.setRequestHeader(f, d.headers[f]);
			if(d.beforeSend && (d.beforeSend.call(p, w, d) === !1 || 2 === T)) return w.abort(), !1;
			for(f in {
					success: 1,
					error: 1,
					complete: 1
				}) w[f](d[f]);
			if(s = x(sn, d, n, w)) {
				w.readyState = 1, c && h.trigger("ajaxSend", [w, d]), d.async && d.timeout > 0 && (l = setTimeout(function() {
					w.abort("timeout")
				}, d.timeout));
				try {
					T = 1, s.send(v, r)
				} catch(S) {
					if(!(2 > T)) throw S;
					r(-1, S)
				}
			} else r(-1, "No Transport");
			return w
		},
		param: function(e, n) {
			var r = [],
				i = function(e, t) {
					t = H.isFunction(t) ? t() : t, r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
				};
			if(n === t && (n = H.ajaxSettings.traditional), H.isArray(e) || e.jquery && !H.isPlainObject(e)) H.each(e, function() {
				i(this.name, this.value)
			});
			else
				for(var o in e) w(o, e[o], n, i);
			return r.join("&").replace(Rt, "+")
		}
	}), H.extend({
		active: 0,
		lastModified: {},
		etag: {}
	});
	var cn = H.now(),
		fn = /(\=)\?(&|$)|\?\?/i;
	H.ajaxSetup({
		jsonp: "callback",
		jsonpCallback: function() {
			return H.expando + "_" + cn++
		}
	}), H.ajaxPrefilter("json jsonp", function(t, n, r) {
		var i = "string" == typeof t.data && /^application\/x\-www\-form\-urlencoded/.test(t.contentType);
		if("jsonp" === t.dataTypes[0] || t.jsonp !== !1 && (fn.test(t.url) || i && fn.test(t.data))) {
			var o, a = t.jsonpCallback = H.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback,
				s = e[a],
				l = t.url,
				u = t.data,
				c = "$1" + a + "$2";
			return t.jsonp !== !1 && (l = l.replace(fn, c), t.url === l && (i && (u = u.replace(fn, c)), t.data === u && (l += (/\?/.test(l) ? "&" : "?") + t.jsonp + "=" + a))), t.url = l, t.data = u, e[a] = function(e) {
				o = [e]
			}, r.always(function() {
				e[a] = s, o && H.isFunction(s) && e[a](o[0])
			}), t.converters["script json"] = function() {
				return o || H.error(a + " was not called"), o[0]
			}, t.dataTypes[0] = "json", "script"
		}
	}), H.ajaxSetup({
		accepts: {
			script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
		},
		contents: {
			script: /javascript|ecmascript/
		},
		converters: {
			"text script": function(e) {
				return H.globalEval(e), e
			}
		}
	}), H.ajaxPrefilter("script", function(e) {
		e.cache === t && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1)
	}), H.ajaxTransport("script", function(e) {
		if(e.crossDomain) {
			var n, r = F.head || F.getElementsByTagName("head")[0] || F.documentElement;
			return {
				send: function(i, o) {
					n = F.createElement("script"), n.async = "async", e.scriptCharset && (n.charset = e.scriptCharset), n.src = e.url, n.onload = n.onreadystatechange = function(e, i) {
						(i || !n.readyState || /loaded|complete/.test(n.readyState)) && (n.onload = n.onreadystatechange = null, r && n.parentNode && r.removeChild(n), n = t, i || o(200, "success"))
					}, r.insertBefore(n, r.firstChild)
				},
				abort: function() {
					n && n.onload(0, 1)
				}
			}
		}
	});
	var dn, pn = e.ActiveXObject ? function() {
			for(var e in dn) dn[e](0, 1)
		} : !1,
		hn = 0;
	H.ajaxSettings.xhr = e.ActiveXObject ? function() {
			return !this.isLocal && E() || k()
		} : E,
		function(e) {
			H.extend(H.support, {
				ajax: !!e,
				cors: !!e && "withCredentials" in e
			})
		}(H.ajaxSettings.xhr()), H.support.ajax && H.ajaxTransport(function(n) {
			if(!n.crossDomain || H.support.cors) {
				var r;
				return;
				return {
					send: function(i, o) {
						var a, s, l = n.xhr();
						if(n.username ? l.open(n.type, n.url, n.async, n.username, n.password) : l.open(n.type, n.url, n.async), n.xhrFields)
							for(s in n.xhrFields) l[s] = n.xhrFields[s];
						n.mimeType && l.overrideMimeType && l.overrideMimeType(n.mimeType), n.crossDomain || i["X-Requested-With"] || (i["X-Requested-With"] = "XMLHttpRequest");
						try {
							for(s in i) l.setRequestHeader(s, i[s])
						} catch(u) {}
				
						l.send(n.hasContent && n.data || null), r = function(e, i) {
							var s, u, c, f, d;
							try {
								if(r && (i || 4 === l.readyState))
									if(r = t, a && (l.onreadystatechange = H.noop, pn && delete dn[a]), i) 4 !== l.readyState && l.abort();
									else {
										s = l.status, c = l.getAllResponseHeaders(), f = {}, d = l.responseXML, d && d.documentElement && (f.xml = d);
										try {
											f.text = l.responseText
										} catch(e) {}
										try {
											u = l.statusText
										} catch(p) {
											u = ""
										}
										s || !n.isLocal || n.crossDomain ? 1223 === s && (s = 204) : s = f.text ? 200 : 404
									}
							} catch(h) {
								i || o(-1, h)
							}
							f && o(s, u, f, c)
						}, n.async && 4 !== l.readyState ? (a = ++hn, pn && (dn || (dn = {}, H(e).unload(pn)), dn[a] = r), l.onreadystatechange = r) : r()
					},
					abort: function() {
						r && r(0, 1)
					}
				}
			}
		});
	var mn, gn, yn, vn, bn = {},
		xn = /^(?:toggle|show|hide)$/,
		Tn = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
		wn = [
			["height", "marginTop", "marginBottom", "paddingTop", "paddingBottom"],
			["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"],
			["opacity"]
		];
	H.fn.extend({
		show: function(e, t, n) {
			var r, i;
			if(e || 0 === e) return this.animate(L("show", 3), e, t, n);
			for(var o = 0, a = this.length; a > o; o++) r = this[o], r.style && (i = r.style.display, H._data(r, "olddisplay") || "none" !== i || (i = r.style.display = ""), ("" === i && "none" === H.css(r, "display") || !H.contains(r.ownerDocument.documentElement, r)) && H._data(r, "olddisplay", D(r.nodeName)));
			for(o = 0; a > o; o++) r = this[o], r.style && (i = r.style.display, ("" === i || "none" === i) && (r.style.display = H._data(r, "olddisplay") || ""));
			return this
		},
		hide: function(e, t, n) {
			if(e || 0 === e) return this.animate(L("hide", 3), e, t, n);
			for(var r, i, o = 0, a = this.length; a > o; o++) r = this[o], r.style && (i = H.css(r, "display"), "none" === i || H._data(r, "olddisplay") || H._data(r, "olddisplay", i));
			for(o = 0; a > o; o++) this[o].style && (this[o].style.display = "none");
			return this
		},
		_toggle: H.fn.toggle,
		toggle: function(e, t, n) {
			var r = "boolean" == typeof e;
			return H.isFunction(e) && H.isFunction(t) ? this._toggle.apply(this, arguments) : null == e || r ? this.each(function() {
				var t = r ? e : H(this).is(":hidden");
				H(this)[t ? "show" : "hide"]()
			}) : this.animate(L("toggle", 3), e, t, n), this
		},
		fadeTo: function(e, t, n, r) {
			return this.filter(":hidden").css("opacity", 0).show().end().animate({
				opacity: t
			}, e, n, r)
		},
		animate: function(e, t, n, r) {
			function i() {
				o.queue === !1 && H._mark(this);
				var t, n, r, i, a, s, l, u, c, f, d, p = H.extend({}, o),
					h = 1 === this.nodeType,
					m = h && H(this).is(":hidden");
				p.animatedProperties = {};
				for(r in e)
					if(t = H.camelCase(r), r !== t && (e[t] = e[r], delete e[r]), (a = H.cssHooks[t]) && "expand" in a) {
						s = a.expand(e[t]), delete e[t];
						for(r in s) r in e || (e[r] = s[r])
					}
				for(t in e) {
					if(n = e[t], H.isArray(n) ? (p.animatedProperties[t] = n[1], n = e[t] = n[0]) : p.animatedProperties[t] = p.specialEasing && p.specialEasing[t] || p.easing || "swing", "hide" === n && m || "show" === n && !m) return p.complete.call(this);
					!h || "height" !== t && "width" !== t || (p.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY], "inline" === H.css(this, "display") && "none" === H.css(this, "float") && (H.support.inlineBlockNeedsLayout && "inline" !== D(this.nodeName) ? this.style.zoom = 1 : this.style.display = "inline-block"))
				}
				null != p.overflow && (this.style.overflow = "hidden");
				for(r in e) i = new H.fx(this, p, r), n = e[r], xn.test(n) ? (d = H._data(this, "toggle" + r) || ("toggle" === n ? m ? "show" : "hide" : 0), d ? (H._data(this, "toggle" + r, "show" === d ? "hide" : "show"), i[d]()) : i[n]()) : (l = Tn.exec(n), u = i.cur(), l ? (c = parseFloat(l[2]), f = l[3] || (H.cssNumber[r] ? "" : "px"), "px" !== f && (H.style(this, r, (c || 1) + f), u = (c || 1) / i.cur() * u, H.style(this, r, u + f)), l[1] && (c = ("-=" === l[1] ? -1 : 1) * c + u), i.custom(u, c, f)) : i.custom(u, n, ""));
				return !0
			}
			var o = H.speed(t, n, r);
			return H.isEmptyObject(e) ? this.each(o.complete, [!1]) : (e = H.extend({}, e), o.queue === !1 ? this.each(i) : this.queue(o.queue, i))
		},
		stop: function(e, n, r) {
			return "string" != typeof e && (r = n, n = e, e = t), n && e !== !1 && this.queue(e || "fx", []), this.each(function() {
				function t(e, t, n) {
					var i = t[n];
					H.removeData(e, n, !0), i.stop(r)
				}
				var n, i = !1,
					o = H.timers,
					a = H._data(this);
				if(r || H._unmark(!0, this), null == e)
					for(n in a) a[n] && a[n].stop && n.indexOf(".run") === n.length - 4 && t(this, a, n);
				else a[n = e + ".run"] && a[n].stop && t(this, a, n);
				for(n = o.length; n--;) o[n].elem !== this || null != e && o[n].queue !== e || (r ? o[n](!0) : o[n].saveState(), i = !0, o.splice(n, 1));
				r && i || H.dequeue(this, e)
			})
		}
	}), H.each({
		slideDown: L("show", 1),
		slideUp: L("hide", 1),
		slideToggle: L("toggle", 1),
		fadeIn: {
			opacity: "show"
		},
		fadeOut: {
			opacity: "hide"
		},
		fadeToggle: {
			opacity: "toggle"
		}
	}, function(e, t) {
		H.fn[e] = function(e, n, r) {
			return this.animate(t, e, n, r)
		}
	}), H.extend({
		speed: function(e, t, n) {
			var r = e && "object" == typeof e ? H.extend({}, e) : {
				complete: n || !n && t || H.isFunction(e) && e,
				duration: e,
				easing: n && t || t && !H.isFunction(t) && t
			};
			return r.duration = H.fx.off ? 0 : "number" == typeof r.duration ? r.duration : r.duration in H.fx.speeds ? H.fx.speeds[r.duration] : H.fx.speeds._default, (null == r.queue || r.queue === !0) && (r.queue = "fx"), r.old = r.complete, r.complete = function(e) {
				H.isFunction(r.old) && r.old.call(this), r.queue ? H.dequeue(this, r.queue) : e !== !1 && H._unmark(this)
			}, r
		},
		easing: {
			linear: function(e) {
				return e
			},
			swing: function(e) {
				return -Math.cos(e * Math.PI) / 2 + .5
			}
		},
		timers: [],
		fx: function(e, t, n) {
			this.options = t, this.elem = e, this.prop = n, t.orig = t.orig || {}
		}
	}), H.fx.prototype = {
		update: function() {
			this.options.step && this.options.step.call(this.elem, this.now, this), (H.fx.step[this.prop] || H.fx.step._default)(this)
		},
		cur: function() {
			if(null != this.elem[this.prop] && (!this.elem.style || null == this.elem.style[this.prop])) return this.elem[this.prop];
			var e, t = H.css(this.elem, this.prop);
			return isNaN(e = parseFloat(t)) ? t && "auto" !== t ? t : 0 : e
		},
		custom: function(e, n, r) {
			function i(e) {
				return o.step(e)
			}
			var o = this,
				a = H.fx;
			this.startTime = vn || S(), this.end = n, this.now = this.start = e, this.pos = this.state = 0, this.unit = r || this.unit || (H.cssNumber[this.prop] ? "" : "px"), i.queue = this.options.queue, i.elem = this.elem, i.saveState = function() {
				H._data(o.elem, "fxshow" + o.prop) === t && (o.options.hide ? H._data(o.elem, "fxshow" + o.prop, o.start) : o.options.show && H._data(o.elem, "fxshow" + o.prop, o.end))
			}, i() && H.timers.push(i) && !yn && (yn = setInterval(a.tick, a.interval))
		},
		show: function() {
			var e = H._data(this.elem, "fxshow" + this.prop);
			this.options.orig[this.prop] = e || H.style(this.elem, this.prop), this.options.show = !0, e !== t ? this.custom(this.cur(), e) : this.custom("width" === this.prop || "height" === this.prop ? 1 : 0, this.cur()), H(this.elem).show()
		},
		hide: function() {
			this.options.orig[this.prop] = H._data(this.elem, "fxshow" + this.prop) || H.style(this.elem, this.prop), this.options.hide = !0, this.custom(this.cur(), 0)
		},
		step: function(e) {
			var t, n, r, i = vn || S(),
				o = !0,
				a = this.elem,
				s = this.options;
			if(e || i >= s.duration + this.startTime) {
				this.now = this.end, this.pos = this.state = 1, this.update(), s.animatedProperties[this.prop] = !0;
				for(t in s.animatedProperties) s.animatedProperties[t] !== !0 && (o = !1);
				if(o) {
					if(null == s.overflow || H.support.shrinkWrapBlocks || H.each(["", "X", "Y"], function(e, t) {
							a.style["overflow" + t] = s.overflow[e]
						}), s.hide && H(a).hide(), s.hide || s.show)
						for(t in s.animatedProperties) H.style(a, t, s.orig[t]), H.removeData(a, "fxshow" + t, !0), H.removeData(a, "toggle" + t, !0);
					r = s.complete, r && (s.complete = !1, r.call(a))
				}
				return !1
			}
			return 1 / 0 == s.duration ? this.now = i : (n = i - this.startTime, this.state = n / s.duration, this.pos = H.easing[s.animatedProperties[this.prop]](this.state, n, 0, 1, s.duration), this.now = this.start + (this.end - this.start) * this.pos), this.update(), !0
		}
	}, H.extend(H.fx, {
		tick: function() {
			for(var e, t = H.timers, n = 0; n < t.length; n++) e = t[n], e() || t[n] !== e || t.splice(n--, 1);
			t.length || H.fx.stop()
		},
		interval: 13,
		stop: function() {
			clearInterval(yn), yn = null
		},
		speeds: {
			slow: 600,
			fast: 200,
			_default: 400
		},
		step: {
			opacity: function(e) {
				H.style(e.elem, "opacity", e.now)
			},
			_default: function(e) {
				e.elem.style && null != e.elem.style[e.prop] ? e.elem.style[e.prop] = e.now + e.unit : e.elem[e.prop] = e.now
			}
		}
	}), H.each(wn.concat.apply([], wn), function(e, t) {
		t.indexOf("margin") && (H.fx.step[t] = function(e) {
			H.style(e.elem, t, Math.max(0, e.now) + e.unit)
		})
	}), H.expr && H.expr.filters && (H.expr.filters.animated = function(e) {
		return H.grep(H.timers, function(t) {
			return e === t.elem
		}).length
	});
	var Nn, Cn = /^t(?:able|d|h)$/i,
		En = /^(?:body|html)$/i;
	Nn = "getBoundingClientRect" in F.documentElement ? function(e, t, n, r) {
		try {
			r = e.getBoundingClientRect()
		} catch(i) {}
		if(!r || !H.contains(n, e)) return r ? {
			top: r.top,
			left: r.left
		} : {
			top: 0,
			left: 0
		};
		var o = t.body,
			a = j(t),
			s = n.clientTop || o.clientTop || 0,
			l = n.clientLeft || o.clientLeft || 0,
			u = a.pageYOffset || H.support.boxModel && n.scrollTop || o.scrollTop,
			c = a.pageXOffset || H.support.boxModel && n.scrollLeft || o.scrollLeft,
			f = r.top + u - s,
			d = r.left + c - l;
		return {
			top: f,
			left: d
		}
	} : function(e, t, n) {
		for(var r, i = e.offsetParent, o = e, a = t.body, s = t.defaultView, l = s ? s.getComputedStyle(e, null) : e.currentStyle, u = e.offsetTop, c = e.offsetLeft;
			(e = e.parentNode) && e !== a && e !== n && (!H.support.fixedPosition || "fixed" !== l.position);) r = s ? s.getComputedStyle(e, null) : e.currentStyle, u -= e.scrollTop, c -= e.scrollLeft, e === i && (u += e.offsetTop, c += e.offsetLeft, !H.support.doesNotAddBorder || H.support.doesAddBorderForTableAndCells && Cn.test(e.nodeName) || (u += parseFloat(r.borderTopWidth) || 0, c += parseFloat(r.borderLeftWidth) || 0), o = i, i = e.offsetParent), H.support.subtractsBorderForOverflowNotVisible && "visible" !== r.overflow && (u += parseFloat(r.borderTopWidth) || 0, c += parseFloat(r.borderLeftWidth) || 0), l = r;
		return("relative" === l.position || "static" === l.position) && (u += a.offsetTop, c += a.offsetLeft), H.support.fixedPosition && "fixed" === l.position && (u += Math.max(n.scrollTop, a.scrollTop), c += Math.max(n.scrollLeft, a.scrollLeft)), {
			top: u,
			left: c
		}
	}, H.fn.offset = function(e) {
		if(arguments.length) return e === t ? this : this.each(function(t) {
			H.offset.setOffset(this, e, t)
		});
		var n = this[0],
			r = n && n.ownerDocument;
		return r ? n === r.body ? H.offset.bodyOffset(n) : Nn(n, r, r.documentElement) : null
	}, H.offset = {
		bodyOffset: function(e) {
			var t = e.offsetTop,
				n = e.offsetLeft;
			return H.support.doesNotIncludeMarginInBodyOffset && (t += parseFloat(H.css(e, "marginTop")) || 0, n += parseFloat(H.css(e, "marginLeft")) || 0), {
				top: t,
				left: n
			}
		},
		setOffset: function(e, t, n) {
			var r = H.css(e, "position");
			"static" === r && (e.style.position = "relative");
			var i, o, a = H(e),
				s = a.offset(),
				l = H.css(e, "top"),
				u = H.css(e, "left"),
				c = ("absolute" === r || "fixed" === r) && H.inArray("auto", [l, u]) > -1,
				f = {},
				d = {};
			c ? (d = a.position(), i = d.top, o = d.left) : (i = parseFloat(l) || 0, o = parseFloat(u) || 0), H.isFunction(t) && (t = t.call(e, n, s)), null != t.top && (f.top = t.top - s.top + i), null != t.left && (f.left = t.left - s.left + o), "using" in t ? t.using.call(e, f) : a.css(f)
		}
	}, H.fn.extend({
		position: function() {
			if(!this[0]) return null;
			var e = this[0],
				t = this.offsetParent(),
				n = this.offset(),
				r = En.test(t[0].nodeName) ? {
					top: 0,
					left: 0
				} : t.offset();
			return n.top -= parseFloat(H.css(e, "marginTop")) || 0, n.left -= parseFloat(H.css(e, "marginLeft")) || 0, r.top += parseFloat(H.css(t[0], "borderTopWidth")) || 0, r.left += parseFloat(H.css(t[0], "borderLeftWidth")) || 0, {
				top: n.top - r.top,
				left: n.left - r.left
			}
		},
		offsetParent: function() {
			return this.map(function() {
				for(var e = this.offsetParent || F.body; e && !En.test(e.nodeName) && "static" === H.css(e, "position");) e = e.offsetParent;
				return e
			})
		}
	}), H.each({
		scrollLeft: "pageXOffset",
		scrollTop: "pageYOffset"
	}, function(e, n) {
		var r = /Y/.test(n);
		H.fn[e] = function(i) {
			return H.access(this, function(e, i, o) {
				var a = j(e);
				return o === t ? a ? n in a ? a[n] : H.support.boxModel && a.document.documentElement[i] || a.document.body[i] : e[i] : (a ? a.scrollTo(r ? H(a).scrollLeft() : o, r ? o : H(a).scrollTop()) : e[i] = o, void 0)
			}, e, i, arguments.length, null)
		}
	}), H.each({
		Height: "height",
		Width: "width"
	}, function(e, n) {
		var r = "client" + e,
			i = "scroll" + e,
			o = "offset" + e;
		H.fn["inner" + e] = function() {
			var e = this[0];
			return e ? e.style ? parseFloat(H.css(e, n, "padding")) : this[n]() : null
		}, H.fn["outer" + e] = function(e) {
			var t = this[0];
			return t ? t.style ? parseFloat(H.css(t, n, e ? "margin" : "border")) : this[n]() : null
		}, H.fn[n] = function(e) {
			return H.access(this, function(e, n, a) {
				var s, l, u, c;
				return H.isWindow(e) ? (s = e.document, l = s.documentElement[r], H.support.boxModel && l || s.body && s.body[r] || l) : 9 === e.nodeType ? (s = e.documentElement, s[r] >= s[i] ? s[r] : Math.max(e.body[i], s[i], e.body[o], s[o])) : a === t ? (u = H.css(e, n), c = parseFloat(u), H.isNumeric(c) ? c : u) : (H(e).css(n, a), void 0)
			}, n, e, arguments.length, null)
		}
	}), e.jQuery = e.$ = H, "function" == typeof define && define.amd && define.amd.jQuery && define("jquery", [], function() {
		return H
	})
}(window);
! function(t, e) {
	function i(e, i) {
		var o, n, r, a = e.nodeName.toLowerCase();
		return "area" === a ? (o = e.parentNode, n = o.name, e.href && n && "map" === o.nodeName.toLowerCase() ? (r = t("img[usemap=#" + n + "]")[0], !!r && s(r)) : !1) : (/input|select|textarea|button|object/.test(a) ? !e.disabled : "a" === a ? e.href || i : i) && s(e)
	}

	function s(e) {
		return t.expr.filters.visible(e) && !t(e).parents().addBack().filter(function() {
			return "hidden" === t.css(this, "visibility")
		}).length
	}
	var o = 0,
		n = /^ui-id-\d+$/;
	t.ui = t.ui || {}, t.extend(t.ui, {
		version: "1.10.3",
		keyCode: {
			BACKSPACE: 8,
			COMMA: 188,
			DELETE: 46,
			DOWN: 40,
			END: 35,
			ENTER: 13,
			ESCAPE: 27,
			HOME: 36,
			LEFT: 37,
			NUMPAD_ADD: 107,
			NUMPAD_DECIMAL: 110,
			NUMPAD_DIVIDE: 111,
			NUMPAD_ENTER: 108,
			NUMPAD_MULTIPLY: 106,
			NUMPAD_SUBTRACT: 109,
			PAGE_DOWN: 34,
			PAGE_UP: 33,
			PERIOD: 190,
			RIGHT: 39,
			SPACE: 32,
			TAB: 9,
			UP: 38
		}
	}), t.fn.extend({
		focus: function(e) {
			return function(i, s) {
				return "number" == typeof i ? this.each(function() {
					var e = this;
					setTimeout(function() {
						t(e).focus(), s && s.call(e)
					}, i)
				}) : e.apply(this, arguments)
			}
		}(t.fn.focus),
		scrollParent: function() {
			var e;
			return e = t.ui.ie && /(static|relative)/.test(this.css("position")) || /absolute/.test(this.css("position")) ? this.parents().filter(function() {
				return /(relative|absolute|fixed)/.test(t.css(this, "position")) && /(auto|scroll)/.test(t.css(this, "overflow") + t.css(this, "overflow-y") + t.css(this, "overflow-x"))
			}).eq(0) : this.parents().filter(function() {
				return /(auto|scroll)/.test(t.css(this, "overflow") + t.css(this, "overflow-y") + t.css(this, "overflow-x"))
			}).eq(0), /fixed/.test(this.css("position")) || !e.length ? t(document) : e
		},
		zIndex: function(i) {
			if(i !== e) return this.css("zIndex", i);
			if(this.length)
				for(var s, o, n = t(this[0]); n.length && n[0] !== document;) {
					if(s = n.css("position"), ("absolute" === s || "relative" === s || "fixed" === s) && (o = parseInt(n.css("zIndex"), 10), !isNaN(o) && 0 !== o)) return o;
					n = n.parent()
				}
			return 0
		},
		uniqueId: function() {
			return this.each(function() {
				this.id || (this.id = "ui-id-" + ++o)
			})
		},
		removeUniqueId: function() {
			return this.each(function() {
				n.test(this.id) && t(this).removeAttr("id")
			})
		}
	}), t.extend(t.expr[":"], {
		data: t.expr.createPseudo ? t.expr.createPseudo(function(e) {
			return function(i) {
				return !!t.data(i, e)
			}
		}) : function(e, i, s) {
			return !!t.data(e, s[3])
		},
		focusable: function(e) {
			return i(e, !isNaN(t.attr(e, "tabindex")))
		},
		tabbable: function(e) {
			var s = t.attr(e, "tabindex"),
				o = isNaN(s);
			return(o || s >= 0) && i(e, !o)
		}
	}), t("<a>").outerWidth(1).jquery || t.each(["Width", "Height"], function(i, s) {
		function o(e, i, s, o) {
			return t.each(n, function() {
				i -= parseFloat(t.css(e, "padding" + this)) || 0, s && (i -= parseFloat(t.css(e, "border" + this + "Width")) || 0), o && (i -= parseFloat(t.css(e, "margin" + this)) || 0)
			}), i
		}
		var n = "Width" === s ? ["Left", "Right"] : ["Top", "Bottom"],
			r = s.toLowerCase(),
			a = {
				innerWidth: t.fn.innerWidth,
				innerHeight: t.fn.innerHeight,
				outerWidth: t.fn.outerWidth,
				outerHeight: t.fn.outerHeight
			};
		t.fn["inner" + s] = function(i) {
			return i === e ? a["inner" + s].call(this) : this.each(function() {
				t(this).css(r, o(this, i) + "px")
			})
		}, t.fn["outer" + s] = function(e, i) {
			return "number" != typeof e ? a["outer" + s].call(this, e) : this.each(function() {
				t(this).css(r, o(this, e, !0, i) + "px")
			})
		}
	}), t.fn.addBack || (t.fn.addBack = function(t) {
		return this.add(null == t ? this.prevObject : this.prevObject.filter(t))
	}), t("<a>").data("a-b", "a").removeData("a-b").data("a-b") && (t.fn.removeData = function(e) {
		return function(i) {
			return arguments.length ? e.call(this, t.camelCase(i)) : e.call(this)
		}
	}(t.fn.removeData)), t.ui.ie = !!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()), t.support.selectstart = "onselectstart" in document.createElement("div"), t.fn.extend({
		disableSelection: function() {
			return this.bind((t.support.selectstart ? "selectstart" : "mousedown") + ".ui-disableSelection", function(t) {
				t.preventDefault()
			})
		},
		enableSelection: function() {
			return this.unbind(".ui-disableSelection")
		}
	}), t.extend(t.ui, {
		plugin: {
			add: function(e, i, s) {
				var o, n = t.ui[e].prototype;
				for(o in s) n.plugins[o] = n.plugins[o] || [], n.plugins[o].push([i, s[o]])
			},
			call: function(t, e, i) {
				var s, o = t.plugins[e];
				if(o && t.element[0].parentNode && 11 !== t.element[0].parentNode.nodeType)
					for(s = 0; s < o.length; s++) t.options[o[s][0]] && o[s][1].apply(t.element, i)
			}
		},
		hasScroll: function(e, i) {
			if("hidden" === t(e).css("overflow")) return !1;
			var s = i && "left" === i ? "scrollLeft" : "scrollTop",
				o = !1;
			return e[s] > 0 ? !0 : (e[s] = 1, o = e[s] > 0, e[s] = 0, o)
		}
	})
}(jQuery),
function(t, e) {
	var i = 0,
		s = Array.prototype.slice,
		o = t.cleanData;
	t.cleanData = function(e) {
		for(var i, s = 0; null != (i = e[s]); s++) try {
			t(i).triggerHandler("remove")
		} catch(n) {}
		o(e)
	}, t.widget = function(e, i, s) {
		var o, n, r, a, h = {},
			l = e.split(".")[0];
		e = e.split(".")[1], o = l + "-" + e, s || (s = i, i = t.Widget), t.expr[":"][o.toLowerCase()] = function(e) {
			return !!t.data(e, o)
		}, t[l] = t[l] || {}, n = t[l][e], r = t[l][e] = function(t, e) {
			return this._createWidget ? (arguments.length && this._createWidget(t, e), void 0) : new r(t, e)
		}, t.extend(r, n, {
			version: s.version,
			_proto: t.extend({}, s),
			_childConstructors: []
		}), a = new i, a.options = t.widget.extend({}, a.options), t.each(s, function(e, s) {
			return t.isFunction(s) ? (h[e] = function() {
				var t = function() {
						return i.prototype[e].apply(this, arguments)
					},
					o = function(t) {
						return i.prototype[e].apply(this, t)
					};
				return function() {
					var e, i = this._super,
						n = this._superApply;
					return this._super = t, this._superApply = o, e = s.apply(this, arguments), this._super = i, this._superApply = n, e
				}
			}(), void 0) : (h[e] = s, void 0)
		}), r.prototype = t.widget.extend(a, {
			widgetEventPrefix: n ? a.widgetEventPrefix : e
		}, h, {
			constructor: r,
			namespace: l,
			widgetName: e,
			widgetFullName: o
		}), n ? (t.each(n._childConstructors, function(e, i) {
			var s = i.prototype;
			t.widget(s.namespace + "." + s.widgetName, r, i._proto)
		}), delete n._childConstructors) : i._childConstructors.push(r), t.widget.bridge(e, r)
	}, t.widget.extend = function(i) {
		for(var o, n, r = s.call(arguments, 1), a = 0, h = r.length; h > a; a++)
			for(o in r[a]) n = r[a][o], r[a].hasOwnProperty(o) && n !== e && (i[o] = t.isPlainObject(n) ? t.isPlainObject(i[o]) ? t.widget.extend({}, i[o], n) : t.widget.extend({}, n) : n);
		return i
	}, t.widget.bridge = function(i, o) {
		var n = o.prototype.widgetFullName || i;
		t.fn[i] = function(r) {
			var a = "string" == typeof r,
				h = s.call(arguments, 1),
				l = this;
			return r = !a && h.length ? t.widget.extend.apply(null, [r].concat(h)) : r, a ? this.each(function() {
				var s, o = t.data(this, n);
				return o ? t.isFunction(o[r]) && "_" !== r.charAt(0) ? (s = o[r].apply(o, h), s !== o && s !== e ? (l = s && s.jquery ? l.pushStack(s.get()) : s, !1) : void 0) : t.error("no such method '" + r + "' for " + i + " widget instance") : t.error("cannot call methods on " + i + " prior to initialization; attempted to call method '" + r + "'")
			}) : this.each(function() {
				var e = t.data(this, n);
				e ? e.option(r || {})._init() : t.data(this, n, new o(r, this))
			}), l
		}
	}, t.Widget = function() {}, t.Widget._childConstructors = [], t.Widget.prototype = {
		widgetName: "widget",
		widgetEventPrefix: "",
		defaultElement: "<div>",
		options: {
			disabled: !1,
			create: null
		},
		_createWidget: function(e, s) {
			s = t(s || this.defaultElement || this)[0], this.element = t(s), this.uuid = i++, this.eventNamespace = "." + this.widgetName + this.uuid, this.options = t.widget.extend({}, this.options, this._getCreateOptions(), e), this.bindings = t(), this.hoverable = t(), this.focusable = t(), s !== this && (t.data(s, this.widgetFullName, this), this._on(!0, this.element, {
				remove: function(t) {
					t.target === s && this.destroy()
				}
			}), this.document = t(s.style ? s.ownerDocument : s.document || s), this.window = t(this.document[0].defaultView || this.document[0].parentWindow)), this._create(), this._trigger("create", null, this._getCreateEventData()), this._init()
		},
		_getCreateOptions: t.noop,
		_getCreateEventData: t.noop,
		_create: t.noop,
		_init: t.noop,
		destroy: function() {
			this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled ui-state-disabled"), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")
		},
		_destroy: t.noop,
		widget: function() {
			return this.element
		},
		option: function(i, s) {
			var o, n, r, a = i;
			if(0 === arguments.length) return t.widget.extend({}, this.options);
			if("string" == typeof i)
				if(a = {}, o = i.split("."), i = o.shift(), o.length) {
					for(n = a[i] = t.widget.extend({}, this.options[i]), r = 0; r < o.length - 1; r++) n[o[r]] = n[o[r]] || {}, n = n[o[r]];
					if(i = o.pop(), s === e) return n[i] === e ? null : n[i];
					n[i] = s
				} else {
					if(s === e) return this.options[i] === e ? null : this.options[i];
					a[i] = s
				}
			return this._setOptions(a), this
		},
		_setOptions: function(t) {
			var e;
			for(e in t) this._setOption(e, t[e]);
			return this
		},
		_setOption: function(t, e) {
			return this.options[t] = e, "disabled" === t && (this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!e).attr("aria-disabled", e), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")), this
		},
		enable: function() {
			return this._setOption("disabled", !1)
		},
		disable: function() {
			return this._setOption("disabled", !0)
		},
		_on: function(e, i, s) {
			var o, n = this;
			"boolean" != typeof e && (s = i, i = e, e = !1), s ? (i = o = t(i), this.bindings = this.bindings.add(i)) : (s = i, i = this.element, o = this.widget()), t.each(s, function(s, r) {
				function a() {
					return e || n.options.disabled !== !0 && !t(this).hasClass("ui-state-disabled") ? ("string" == typeof r ? n[r] : r).apply(n, arguments) : void 0
				}
				"string" != typeof r && (a.guid = r.guid = r.guid || a.guid || t.guid++);
				var h = s.match(/^(\w+)\s*(.*)$/),
					l = h[1] + n.eventNamespace,
					c = h[2];
				c ? o.delegate(c, l, a) : i.bind(l, a)
			})
		},
		_off: function(t, e) {
			e = (e || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, t.unbind(e).undelegate(e)
		},
		_delay: function(t, e) {
			function i() {
				return("string" == typeof t ? s[t] : t).apply(s, arguments)
			}
			var s = this;
			return setTimeout(i, e || 0)
		},
		_hoverable: function(e) {
			this.hoverable = this.hoverable.add(e), this._on(e, {
				mouseenter: function(e) {
					t(e.currentTarget).addClass("ui-state-hover")
				},
				mouseleave: function(e) {
					t(e.currentTarget).removeClass("ui-state-hover")
				}
			})
		},
		_focusable: function(e) {
			this.focusable = this.focusable.add(e), this._on(e, {
				focusin: function(e) {
					t(e.currentTarget).addClass("ui-state-focus")
				},
				focusout: function(e) {
					t(e.currentTarget).removeClass("ui-state-focus")
				}
			})
		},
		_trigger: function(e, i, s) {
			var o, n, r = this.options[e];
			if(s = s || {}, i = t.Event(i), i.type = (e === this.widgetEventPrefix ? e : this.widgetEventPrefix + e).toLowerCase(), i.target = this.element[0], n = i.originalEvent)
				for(o in n) o in i || (i[o] = n[o]);
			return this.element.trigger(i, s), !(t.isFunction(r) && r.apply(this.element[0], [i].concat(s)) === !1 || i.isDefaultPrevented())
		}
	}, t.each({
		show: "fadeIn",
		hide: "fadeOut"
	}, function(e, i) {
		t.Widget.prototype["_" + e] = function(s, o, n) {
			"string" == typeof o && (o = {
				effect: o
			});
			var r, a = o ? o === !0 || "number" == typeof o ? i : o.effect || i : e;
			o = o || {}, "number" == typeof o && (o = {
				duration: o
			}), r = !t.isEmptyObject(o), o.complete = n, o.delay && s.delay(o.delay), r && t.effects && t.effects.effect[a] ? s[e](o) : a !== e && s[a] ? s[a](o.duration, o.easing, n) : s.queue(function(i) {
				t(this)[e](), n && n.call(s[0]), i()
			})
		}
	})
}(jQuery),
function(t) {
	var e = !1;
	t(document).mouseup(function() {
		e = !1
	}), t.widget("ui.mouse", {
		version: "1.10.3",
		options: {
			cancel: "input,textarea,button,select,option",
			distance: 1,
			delay: 0
		},
		_mouseInit: function() {
			var e = this;
			this.element.bind("mousedown." + this.widgetName, function(t) {
				return e._mouseDown(t)
			}).bind("click." + this.widgetName, function(i) {
				return !0 === t.data(i.target, e.widgetName + ".preventClickEvent") ? (t.removeData(i.target, e.widgetName + ".preventClickEvent"), i.stopImmediatePropagation(), !1) : void 0
			}), this.started = !1
		},
		_mouseDestroy: function() {
			this.element.unbind("." + this.widgetName), this._mouseMoveDelegate && t(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate)
		},
		_mouseDown: function(i) {
			if(!e) {
				this._mouseStarted && this._mouseUp(i), this._mouseDownEvent = i;
				var s = this,
					o = 1 === i.which,
					n = "string" == typeof this.options.cancel && i.target.nodeName ? t(i.target).closest(this.options.cancel).length : !1;
				return o && !n && this._mouseCapture(i) ? (this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function() {
					s.mouseDelayMet = !0
				}, this.options.delay)), this._mouseDistanceMet(i) && this._mouseDelayMet(i) && (this._mouseStarted = this._mouseStart(i) !== !1, !this._mouseStarted) ? (i.preventDefault(), !0) : (!0 === t.data(i.target, this.widgetName + ".preventClickEvent") && t.removeData(i.target, this.widgetName + ".preventClickEvent"), this._mouseMoveDelegate = function(t) {
					return s._mouseMove(t)
				}, this._mouseUpDelegate = function(t) {
					return s._mouseUp(t)
				}, t(document).bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate), i.preventDefault(), e = !0, !0)) : !0
			}
		},
		_mouseMove: function(e) {
			return t.ui.ie && (!document.documentMode || document.documentMode < 9) && !e.button ? this._mouseUp(e) : this._mouseStarted ? (this._mouseDrag(e), e.preventDefault()) : (this._mouseDistanceMet(e) && this._mouseDelayMet(e) && (this._mouseStarted = this._mouseStart(this._mouseDownEvent, e) !== !1, this._mouseStarted ? this._mouseDrag(e) : this._mouseUp(e)), !this._mouseStarted)
		},
		_mouseUp: function(e) {
			return t(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate), this._mouseStarted && (this._mouseStarted = !1, e.target === this._mouseDownEvent.target && t.data(e.target, this.widgetName + ".preventClickEvent", !0), this._mouseStop(e)), !1
		},
		_mouseDistanceMet: function(t) {
			return Math.max(Math.abs(this._mouseDownEvent.pageX - t.pageX), Math.abs(this._mouseDownEvent.pageY - t.pageY)) >= this.options.distance
		},
		_mouseDelayMet: function() {
			return this.mouseDelayMet
		},
		_mouseStart: function() {},
		_mouseDrag: function() {},
		_mouseStop: function() {},
		_mouseCapture: function() {
			return !0
		}
	})
}(jQuery),
function(t) {
	t.widget("ui.draggable", t.ui.mouse, {
		version: "1.10.3",
		widgetEventPrefix: "drag",
		options: {
			addClasses: !0,
			appendTo: "parent",
			axis: !1,
			connectToSortable: !1,
			containment: !1,
			cursor: "auto",
			cursorAt: !1,
			grid: !1,
			handle: !1,
			helper: "original",
			iframeFix: !1,
			opacity: !1,
			refreshPositions: !1,
			revert: !1,
			revertDuration: 500,
			scope: "default",
			scroll: !0,
			scrollSensitivity: 20,
			scrollSpeed: 20,
			snap: !1,
			snapMode: "both",
			snapTolerance: 20,
			stack: !1,
			zIndex: !1,
			drag: null,
			start: null,
			stop: null
		},
		_create: function() {
			"original" !== this.options.helper || /^(?:r|a|f)/.test(this.element.css("position")) || (this.element[0].style.position = "relative"), this.options.addClasses && this.element.addClass("ui-draggable"), this.options.disabled && this.element.addClass("ui-draggable-disabled"), this._mouseInit()
		},
		_destroy: function() {
			this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"), this._mouseDestroy()
		},
		_mouseCapture: function(e) {
			var i = this.options;
			return this.helper || i.disabled || t(e.target).closest(".ui-resizable-handle").length > 0 ? !1 : (this.handle = this._getHandle(e), this.handle ? (t(i.iframeFix === !0 ? "iframe" : i.iframeFix).each(function() {
				t("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({
					width: this.offsetWidth + "px",
					height: this.offsetHeight + "px",
					position: "absolute",
					opacity: "0.001",
					zIndex: 1e3
				}).css(t(this).offset()).appendTo("body")
			}), !0) : !1)
		},
		_mouseStart: function(e) {
			var i = this.options;
			return this.helper = this._createHelper(e), this.helper.addClass("ui-draggable-dragging"), this._cacheHelperProportions(), t.ui.ddmanager && (t.ui.ddmanager.current = this), this._cacheMargins(), this.cssPosition = this.helper.css("position"), this.scrollParent = this.helper.scrollParent(), this.offsetParent = this.helper.offsetParent(), this.offsetParentCssPosition = this.offsetParent.css("position"), this.offset = this.positionAbs = this.element.offset(), this.offset = {
				top: this.offset.top - this.margins.top,
				left: this.offset.left - this.margins.left
			}, this.offset.scroll = !1, t.extend(this.offset, {
				click: {
					left: e.pageX - this.offset.left,
					top: e.pageY - this.offset.top
				},
				parent: this._getParentOffset(),
				relative: this._getRelativeOffset()
			}), this.originalPosition = this.position = this._generatePosition(e), this.originalPageX = e.pageX, this.originalPageY = e.pageY, i.cursorAt && this._adjustOffsetFromHelper(i.cursorAt), this._setContainment(), this._trigger("start", e) === !1 ? (this._clear(), !1) : (this._cacheHelperProportions(), t.ui.ddmanager && !i.dropBehaviour && t.ui.ddmanager.prepareOffsets(this, e), this._mouseDrag(e, !0), t.ui.ddmanager && t.ui.ddmanager.dragStart(this, e), !0)
		},
		_mouseDrag: function(e, i) {
			if("fixed" === this.offsetParentCssPosition && (this.offset.parent = this._getParentOffset()), this.position = this._generatePosition(e), this.positionAbs = this._convertPositionTo("absolute"), !i) {
				var s = this._uiHash();
				if(this._trigger("drag", e, s) === !1) return this._mouseUp({}), !1;
				this.position = s.position
			}
			return this.options.axis && "y" === this.options.axis || (this.helper[0].style.left = this.position.left + "px"), this.options.axis && "x" === this.options.axis || (this.helper[0].style.top = this.position.top + "px"), t.ui.ddmanager && t.ui.ddmanager.drag(this, e), !1
		},
		_mouseStop: function(e) {
			var i = this,
				s = !1;
			return t.ui.ddmanager && !this.options.dropBehaviour && (s = t.ui.ddmanager.drop(this, e)), this.dropped && (s = this.dropped, this.dropped = !1), "original" !== this.options.helper || t.contains(this.element[0].ownerDocument, this.element[0]) ? ("invalid" === this.options.revert && !s || "valid" === this.options.revert && s || this.options.revert === !0 || t.isFunction(this.options.revert) && this.options.revert.call(this.element, s) ? t(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
				i._trigger("stop", e) !== !1 && i._clear()
			}) : this._trigger("stop", e) !== !1 && this._clear(), !1) : !1
		},
		_mouseUp: function(e) {
			return t("div.ui-draggable-iframeFix").each(function() {
				this.parentNode.removeChild(this)
			}), t.ui.ddmanager && t.ui.ddmanager.dragStop(this, e), t.ui.mouse.prototype._mouseUp.call(this, e)
		},
		cancel: function() {
			return this.helper.is(".ui-draggable-dragging") ? this._mouseUp({}) : this._clear(), this
		},
		_getHandle: function(e) {
			return this.options.handle ? !!t(e.target).closest(this.element.find(this.options.handle)).length : !0
		},
		_createHelper: function(e) {
			var i = this.options,
				s = t.isFunction(i.helper) ? t(i.helper.apply(this.element[0], [e])) : "clone" === i.helper ? this.element.clone().removeAttr("id") : this.element;
			return s.parents("body").length || s.appendTo("parent" === i.appendTo ? this.element[0].parentNode : i.appendTo), s[0] === this.element[0] || /(fixed|absolute)/.test(s.css("position")) || s.css("position", "absolute"), s
		},
		_adjustOffsetFromHelper: function(e) {
			"string" == typeof e && (e = e.split(" ")), t.isArray(e) && (e = {
				left: +e[0],
				top: +e[1] || 0
			}), "left" in e && (this.offset.click.left = e.left + this.margins.left), "right" in e && (this.offset.click.left = this.helperProportions.width - e.right + this.margins.left), "top" in e && (this.offset.click.top = e.top + this.margins.top), "bottom" in e && (this.offset.click.top = this.helperProportions.height - e.bottom + this.margins.top)
		},
		_getParentOffset: function() {
			var e = this.offsetParent.offset();
			return "absolute" === this.cssPosition && this.scrollParent[0] !== document && t.contains(this.scrollParent[0], this.offsetParent[0]) && (e.left += this.scrollParent.scrollLeft(), e.top += this.scrollParent.scrollTop()), (this.offsetParent[0] === document.body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() && t.ui.ie) && (e = {
				top: 0,
				left: 0
			}), {
				top: e.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
				left: e.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
			}
		},
		_getRelativeOffset: function() {
			if("relative" === this.cssPosition) {
				var t = this.element.position();
				return {
					top: t.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
					left: t.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
				}
			}
			return {
				top: 0,
				left: 0
			}
		},
		_cacheMargins: function() {
			this.margins = {
				left: parseInt(this.element.css("marginLeft"), 10) || 0,
				top: parseInt(this.element.css("marginTop"), 10) || 0,
				right: parseInt(this.element.css("marginRight"), 10) || 0,
				bottom: parseInt(this.element.css("marginBottom"), 10) || 0
			}
		},
		_cacheHelperProportions: function() {
			this.helperProportions = {
				width: this.helper.outerWidth(),
				height: this.helper.outerHeight()
			}
		},
		_setContainment: function() {
			var e, i, s, o = this.options;
			return o.containment ? "window" === o.containment ? (this.containment = [t(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, t(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, t(window).scrollLeft() + t(window).width() - this.helperProportions.width - this.margins.left, t(window).scrollTop() + (t(window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top], void 0) : "document" === o.containment ? (this.containment = [0, 0, t(document).width() - this.helperProportions.width - this.margins.left, (t(document).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top], void 0) : o.containment.constructor === Array ? (this.containment = o.containment, void 0) : ("parent" === o.containment && (o.containment = this.helper[0].parentNode), i = t(o.containment), s = i[0], s && (e = "hidden" !== i.css("overflow"), this.containment = [(parseInt(i.css("borderLeftWidth"), 10) || 0) + (parseInt(i.css("paddingLeft"), 10) || 0), (parseInt(i.css("borderTopWidth"), 10) || 0) + (parseInt(i.css("paddingTop"), 10) || 0), (e ? Math.max(s.scrollWidth, s.offsetWidth) : s.offsetWidth) - (parseInt(i.css("borderRightWidth"), 10) || 0) - (parseInt(i.css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, (e ? Math.max(s.scrollHeight, s.offsetHeight) : s.offsetHeight) - (parseInt(i.css("borderBottomWidth"), 10) || 0) - (parseInt(i.css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom], this.relative_container = i), void 0) : (this.containment = null, void 0)
		},
		_convertPositionTo: function(e, i) {
			i || (i = this.position);
			var s = "absolute" === e ? 1 : -1,
				o = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && t.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent;
			return this.offset.scroll || (this.offset.scroll = {
				top: o.scrollTop(),
				left: o.scrollLeft()
			}), {
				top: i.top + this.offset.relative.top * s + this.offset.parent.top * s - ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : this.offset.scroll.top) * s,
				left: i.left + this.offset.relative.left * s + this.offset.parent.left * s - ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : this.offset.scroll.left) * s
			}
		},
		_generatePosition: function(e) {
			var i, s, o, n, r = this.options,
				a = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && t.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
				h = e.pageX,
				l = e.pageY;
			return this.offset.scroll || (this.offset.scroll = {
				top: a.scrollTop(),
				left: a.scrollLeft()
			}), this.originalPosition && (this.containment && (this.relative_container ? (s = this.relative_container.offset(), i = [this.containment[0] + s.left, this.containment[1] + s.top, this.containment[2] + s.left, this.containment[3] + s.top]) : i = this.containment, e.pageX - this.offset.click.left < i[0] && (h = i[0] + this.offset.click.left), e.pageY - this.offset.click.top < i[1] && (l = i[1] + this.offset.click.top), e.pageX - this.offset.click.left > i[2] && (h = i[2] + this.offset.click.left), e.pageY - this.offset.click.top > i[3] && (l = i[3] + this.offset.click.top)), r.grid && (o = r.grid[1] ? this.originalPageY + Math.round((l - this.originalPageY) / r.grid[1]) * r.grid[1] : this.originalPageY, l = i ? o - this.offset.click.top >= i[1] || o - this.offset.click.top > i[3] ? o : o - this.offset.click.top >= i[1] ? o - r.grid[1] : o + r.grid[1] : o, n = r.grid[0] ? this.originalPageX + Math.round((h - this.originalPageX) / r.grid[0]) * r.grid[0] : this.originalPageX, h = i ? n - this.offset.click.left >= i[0] || n - this.offset.click.left > i[2] ? n : n - this.offset.click.left >= i[0] ? n - r.grid[0] : n + r.grid[0] : n)), {
				top: l - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : this.offset.scroll.top),
				left: h - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : this.offset.scroll.left)
			}
		},
		_clear: function() {
			this.helper.removeClass("ui-draggable-dragging"), this.helper[0] === this.element[0] || this.cancelHelperRemoval || this.helper.remove(), this.helper = null, this.cancelHelperRemoval = !1
		},
		_trigger: function(e, i, s) {
			return s = s || this._uiHash(), t.ui.plugin.call(this, e, [i, s]), "drag" === e && (this.positionAbs = this._convertPositionTo("absolute")), t.Widget.prototype._trigger.call(this, e, i, s)
		},
		plugins: {},
		_uiHash: function() {
			return {
				helper: this.helper,
				position: this.position,
				originalPosition: this.originalPosition,
				offset: this.positionAbs
			}
		}
	}), t.ui.plugin.add("draggable", "connectToSortable", {
		start: function(e, i) {
			var s = t(this).data("ui-draggable"),
				o = s.options,
				n = t.extend({}, i, {
					item: s.element
				});
			s.sortables = [], t(o.connectToSortable).each(function() {
				var i = t.data(this, "ui-sortable");
				i && !i.options.disabled && (s.sortables.push({
					instance: i,
					shouldRevert: i.options.revert
				}), i.refreshPositions(), i._trigger("activate", e, n))
			})
		},
		stop: function(e, i) {
			var s = t(this).data("ui-draggable"),
				o = t.extend({}, i, {
					item: s.element
				});
			t.each(s.sortables, function() {
				this.instance.isOver ? (this.instance.isOver = 0, s.cancelHelperRemoval = !0, this.instance.cancelHelperRemoval = !1, this.shouldRevert && (this.instance.options.revert = this.shouldRevert), this.instance._mouseStop(e), this.instance.options.helper = this.instance.options._helper, "original" === s.options.helper && this.instance.currentItem.css({
					top: "auto",
					left: "auto"
				})) : (this.instance.cancelHelperRemoval = !1, this.instance._trigger("deactivate", e, o))
			})
		},
		drag: function(e, i) {
			var s = t(this).data("ui-draggable"),
				o = this;
			t.each(s.sortables, function() {
				var n = !1,
					r = this;
				this.instance.positionAbs = s.positionAbs, this.instance.helperProportions = s.helperProportions, this.instance.offset.click = s.offset.click, this.instance._intersectsWith(this.instance.containerCache) && (n = !0, t.each(s.sortables, function() {
					return this.instance.positionAbs = s.positionAbs, this.instance.helperProportions = s.helperProportions, this.instance.offset.click = s.offset.click, this !== r && this.instance._intersectsWith(this.instance.containerCache) && t.contains(r.instance.element[0], this.instance.element[0]) && (n = !1), n
				})), n ? (this.instance.isOver || (this.instance.isOver = 1, this.instance.currentItem = t(o).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", !0), this.instance.options._helper = this.instance.options.helper, this.instance.options.helper = function() {
					return i.helper[0]
				}, e.target = this.instance.currentItem[0], this.instance._mouseCapture(e, !0), this.instance._mouseStart(e, !0, !0), this.instance.offset.click.top = s.offset.click.top, this.instance.offset.click.left = s.offset.click.left, this.instance.offset.parent.left -= s.offset.parent.left - this.instance.offset.parent.left, this.instance.offset.parent.top -= s.offset.parent.top - this.instance.offset.parent.top, s._trigger("toSortable", e), s.dropped = this.instance.element, s.currentItem = s.element, this.instance.fromOutside = s), this.instance.currentItem && this.instance._mouseDrag(e)) : this.instance.isOver && (this.instance.isOver = 0, this.instance.cancelHelperRemoval = !0, this.instance.options.revert = !1, this.instance._trigger("out", e, this.instance._uiHash(this.instance)), this.instance._mouseStop(e, !0), this.instance.options.helper = this.instance.options._helper, this.instance.currentItem.remove(), this.instance.placeholder && this.instance.placeholder.remove(), s._trigger("fromSortable", e), s.dropped = !1)
			})
		}
	}), t.ui.plugin.add("draggable", "cursor", {
		start: function() {
			var e = t("body"),
				i = t(this).data("ui-draggable").options;
			e.css("cursor") && (i._cursor = e.css("cursor")), e.css("cursor", i.cursor)
		},
		stop: function() {
			var e = t(this).data("ui-draggable").options;
			e._cursor && t("body").css("cursor", e._cursor)
		}
	}), t.ui.plugin.add("draggable", "opacity", {
		start: function(e, i) {
			var s = t(i.helper),
				o = t(this).data("ui-draggable").options;
			s.css("opacity") && (o._opacity = s.css("opacity")), s.css("opacity", o.opacity)
		},
		stop: function(e, i) {
			var s = t(this).data("ui-draggable").options;
			s._opacity && t(i.helper).css("opacity", s._opacity)
		}
	}), t.ui.plugin.add("draggable", "scroll", {
		start: function() {
			var e = t(this).data("ui-draggable");
			e.scrollParent[0] !== document && "HTML" !== e.scrollParent[0].tagName && (e.overflowOffset = e.scrollParent.offset())
		},
		drag: function(e) {
			var i = t(this).data("ui-draggable"),
				s = i.options,
				o = !1;
			i.scrollParent[0] !== document && "HTML" !== i.scrollParent[0].tagName ? (s.axis && "x" === s.axis || (i.overflowOffset.top + i.scrollParent[0].offsetHeight - e.pageY < s.scrollSensitivity ? i.scrollParent[0].scrollTop = o = i.scrollParent[0].scrollTop + s.scrollSpeed : e.pageY - i.overflowOffset.top < s.scrollSensitivity && (i.scrollParent[0].scrollTop = o = i.scrollParent[0].scrollTop - s.scrollSpeed)), s.axis && "y" === s.axis || (i.overflowOffset.left + i.scrollParent[0].offsetWidth - e.pageX < s.scrollSensitivity ? i.scrollParent[0].scrollLeft = o = i.scrollParent[0].scrollLeft + s.scrollSpeed : e.pageX - i.overflowOffset.left < s.scrollSensitivity && (i.scrollParent[0].scrollLeft = o = i.scrollParent[0].scrollLeft - s.scrollSpeed))) : (s.axis && "x" === s.axis || (e.pageY - t(document).scrollTop() < s.scrollSensitivity ? o = t(document).scrollTop(t(document).scrollTop() - s.scrollSpeed) : t(window).height() - (e.pageY - t(document).scrollTop()) < s.scrollSensitivity && (o = t(document).scrollTop(t(document).scrollTop() + s.scrollSpeed))), s.axis && "y" === s.axis || (e.pageX - t(document).scrollLeft() < s.scrollSensitivity ? o = t(document).scrollLeft(t(document).scrollLeft() - s.scrollSpeed) : t(window).width() - (e.pageX - t(document).scrollLeft()) < s.scrollSensitivity && (o = t(document).scrollLeft(t(document).scrollLeft() + s.scrollSpeed)))), o !== !1 && t.ui.ddmanager && !s.dropBehaviour && t.ui.ddmanager.prepareOffsets(i, e)
		}
	}), t.ui.plugin.add("draggable", "snap", {
		start: function() {
			var e = t(this).data("ui-draggable"),
				i = e.options;
			e.snapElements = [], t(i.snap.constructor !== String ? i.snap.items || ":data(ui-draggable)" : i.snap).each(function() {
				var i = t(this),
					s = i.offset();
				this !== e.element[0] && e.snapElements.push({
					item: this,
					width: i.outerWidth(),
					height: i.outerHeight(),
					top: s.top,
					left: s.left
				})
			})
		},
		drag: function(e, i) {
			var s, o, n, r, a, h, l, c, p, f, u = t(this).data("ui-draggable"),
				d = u.options,
				g = d.snapTolerance,
				m = i.offset.left,
				v = m + u.helperProportions.width,
				_ = i.offset.top,
				P = _ + u.helperProportions.height;
			for(p = u.snapElements.length - 1; p >= 0; p--) a = u.snapElements[p].left, h = a + u.snapElements[p].width, l = u.snapElements[p].top, c = l + u.snapElements[p].height, a - g > v || m > h + g || l - g > P || _ > c + g || !t.contains(u.snapElements[p].item.ownerDocument, u.snapElements[p].item) ? (u.snapElements[p].snapping && u.options.snap.release && u.options.snap.release.call(u.element, e, t.extend(u._uiHash(), {
				snapItem: u.snapElements[p].item
			})), u.snapElements[p].snapping = !1) : ("inner" !== d.snapMode && (s = Math.abs(l - P) <= g, o = Math.abs(c - _) <= g, n = Math.abs(a - v) <= g, r = Math.abs(h - m) <= g, s && (i.position.top = u._convertPositionTo("relative", {
				top: l - u.helperProportions.height,
				left: 0
			}).top - u.margins.top), o && (i.position.top = u._convertPositionTo("relative", {
				top: c,
				left: 0
			}).top - u.margins.top), n && (i.position.left = u._convertPositionTo("relative", {
				top: 0,
				left: a - u.helperProportions.width
			}).left - u.margins.left), r && (i.position.left = u._convertPositionTo("relative", {
				top: 0,
				left: h
			}).left - u.margins.left)), f = s || o || n || r, "outer" !== d.snapMode && (s = Math.abs(l - _) <= g, o = Math.abs(c - P) <= g, n = Math.abs(a - m) <= g, r = Math.abs(h - v) <= g, s && (i.position.top = u._convertPositionTo("relative", {
				top: l,
				left: 0
			}).top - u.margins.top), o && (i.position.top = u._convertPositionTo("relative", {
				top: c - u.helperProportions.height,
				left: 0
			}).top - u.margins.top), n && (i.position.left = u._convertPositionTo("relative", {
				top: 0,
				left: a
			}).left - u.margins.left), r && (i.position.left = u._convertPositionTo("relative", {
				top: 0,
				left: h - u.helperProportions.width
			}).left - u.margins.left)), !u.snapElements[p].snapping && (s || o || n || r || f) && u.options.snap.snap && u.options.snap.snap.call(u.element, e, t.extend(u._uiHash(), {
				snapItem: u.snapElements[p].item
			})), u.snapElements[p].snapping = s || o || n || r || f)
		}
	}), t.ui.plugin.add("draggable", "stack", {
		start: function() {
			var e, i = this.data("ui-draggable").options,
				s = t.makeArray(t(i.stack)).sort(function(e, i) {
					return(parseInt(t(e).css("zIndex"), 10) || 0) - (parseInt(t(i).css("zIndex"), 10) || 0)
				});
			s.length && (e = parseInt(t(s[0]).css("zIndex"), 10) || 0, t(s).each(function(i) {
				t(this).css("zIndex", e + i)
			}), this.css("zIndex", e + s.length))
		}
	}), t.ui.plugin.add("draggable", "zIndex", {
		start: function(e, i) {
			var s = t(i.helper),
				o = t(this).data("ui-draggable").options;
			s.css("zIndex") && (o._zIndex = s.css("zIndex")), s.css("zIndex", o.zIndex)
		},
		stop: function(e, i) {
			var s = t(this).data("ui-draggable").options;
			s._zIndex && t(i.helper).css("zIndex", s._zIndex)
		}
	})
}(jQuery),
function(t) {
	function e(t, e, i) {
		return t > e && e + i > t
	}

	function i(t) {
		return /left|right/.test(t.css("float")) || /inline|table-cell/.test(t.css("display"))
	}
	t.widget("ui.sortable", t.ui.mouse, {
		version: "1.10.3",
		widgetEventPrefix: "sort",
		ready: !1,
		options: {
			appendTo: "parent",
			axis: !1,
			connectWith: !1,
			containment: !1,
			cursor: "auto",
			cursorAt: !1,
			dropOnEmpty: !0,
			forcePlaceholderSize: !1,
			forceHelperSize: !1,
			grid: !1,
			handle: !1,
			helper: "original",
			items: "> *",
			opacity: !1,
			placeholder: !1,
			revert: !1,
			scroll: !0,
			scrollSensitivity: 20,
			scrollSpeed: 20,
			scope: "default",
			tolerance: "intersect",
			zIndex: 1e3,
			activate: null,
			beforeStop: null,
			change: null,
			deactivate: null,
			out: null,
			over: null,
			receive: null,
			remove: null,
			sort: null,
			start: null,
			stop: null,
			update: null
		},
		_create: function() {
			var t = this.options;
			this.containerCache = {}, this.element.addClass("ui-sortable"), this.refresh(), this.floating = this.items.length ? "x" === t.axis || i(this.items[0].item) : !1, this.offset = this.element.offset(), this._mouseInit(), this.ready = !0
		},
		_destroy: function() {
			this.element.removeClass("ui-sortable ui-sortable-disabled"), this._mouseDestroy();
			for(var t = this.items.length - 1; t >= 0; t--) this.items[t].item.removeData(this.widgetName + "-item");
			return this
		},
		_setOption: function(e, i) {
			"disabled" === e ? (this.options[e] = i, this.widget().toggleClass("ui-sortable-disabled", !!i)) : t.Widget.prototype._setOption.apply(this, arguments)
		},
		_mouseCapture: function(e, i) {
			var s = null,
				o = !1,
				n = this;
			return this.reverting ? !1 : this.options.disabled || "static" === this.options.type ? !1 : (this._refreshItems(e), t(e.target).parents().each(function() {
				return t.data(this, n.widgetName + "-item") === n ? (s = t(this), !1) : void 0
			}), t.data(e.target, n.widgetName + "-item") === n && (s = t(e.target)), s ? !this.options.handle || i || (t(this.options.handle, s).find("*").addBack().each(function() {
				this === e.target && (o = !0)
			}), o) ? (this.currentItem = s, this._removeCurrentsFromItems(), !0) : !1 : !1)
		},
		_mouseStart: function(e, i, s) {
			var o, n, r = this.options;
			if(this.currentContainer = this, this.refreshPositions(), this.helper = this._createHelper(e), this._cacheHelperProportions(), this._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {
					top: this.offset.top - this.margins.top,
					left: this.offset.left - this.margins.left
				}, t.extend(this.offset, {
					click: {
						left: e.pageX - this.offset.left,
						top: e.pageY - this.offset.top
					},
					parent: this._getParentOffset(),
					relative: this._getRelativeOffset()
				}), this.helper.css("position", "absolute"), this.cssPosition = this.helper.css("position"), this.originalPosition = this._generatePosition(e), this.originalPageX = e.pageX, this.originalPageY = e.pageY, r.cursorAt && this._adjustOffsetFromHelper(r.cursorAt), this.domPosition = {
					prev: this.currentItem.prev()[0],
					parent: this.currentItem.parent()[0]
				}, this.helper[0] !== this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), r.containment && this._setContainment(), r.cursor && "auto" !== r.cursor && (n = this.document.find("body"), this.storedCursor = n.css("cursor"), n.css("cursor", r.cursor), this.storedStylesheet = t("<style>*{ cursor: " + r.cursor + " !important; }</style>").appendTo(n)), r.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")), this.helper.css("opacity", r.opacity)), r.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")), this.helper.css("zIndex", r.zIndex)), this.scrollParent[0] !== document && "HTML" !== this.scrollParent[0].tagName && (this.overflowOffset = this.scrollParent.offset()), this._trigger("start", e, this._uiHash()), this._preserveHelperProportions || this._cacheHelperProportions(), !s)
				for(o = this.containers.length - 1; o >= 0; o--) this.containers[o]._trigger("activate", e, this._uiHash(this));
			return t.ui.ddmanager && (t.ui.ddmanager.current = this), t.ui.ddmanager && !r.dropBehaviour && t.ui.ddmanager.prepareOffsets(this, e), this.dragging = !0, this.helper.addClass("ui-sortable-helper"), this._mouseDrag(e), !0
		},
		_mouseDrag: function(e) {
			var i, s, o, n, r = this.options,
				a = !1;
			for(this.position = this._generatePosition(e), this.positionAbs = this._convertPositionTo("absolute"), this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs), this.options.scroll && (this.scrollParent[0] !== document && "HTML" !== this.scrollParent[0].tagName ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - e.pageY < r.scrollSensitivity ? this.scrollParent[0].scrollTop = a = this.scrollParent[0].scrollTop + r.scrollSpeed : e.pageY - this.overflowOffset.top < r.scrollSensitivity && (this.scrollParent[0].scrollTop = a = this.scrollParent[0].scrollTop - r.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - e.pageX < r.scrollSensitivity ? this.scrollParent[0].scrollLeft = a = this.scrollParent[0].scrollLeft + r.scrollSpeed : e.pageX - this.overflowOffset.left < r.scrollSensitivity && (this.scrollParent[0].scrollLeft = a = this.scrollParent[0].scrollLeft - r.scrollSpeed)) : (e.pageY - t(document).scrollTop() < r.scrollSensitivity ? a = t(document).scrollTop(t(document).scrollTop() - r.scrollSpeed) : t(window).height() - (e.pageY - t(document).scrollTop()) < r.scrollSensitivity && (a = t(document).scrollTop(t(document).scrollTop() + r.scrollSpeed)), e.pageX - t(document).scrollLeft() < r.scrollSensitivity ? a = t(document).scrollLeft(t(document).scrollLeft() - r.scrollSpeed) : t(window).width() - (e.pageX - t(document).scrollLeft()) < r.scrollSensitivity && (a = t(document).scrollLeft(t(document).scrollLeft() + r.scrollSpeed))), a !== !1 && t.ui.ddmanager && !r.dropBehaviour && t.ui.ddmanager.prepareOffsets(this, e)), this.positionAbs = this._convertPositionTo("absolute"), this.options.axis && "y" === this.options.axis || (this.helper[0].style.left = this.position.left + "px"), this.options.axis && "x" === this.options.axis || (this.helper[0].style.top = this.position.top + "px"), i = this.items.length - 1; i >= 0; i--)
				if(s = this.items[i], o = s.item[0], n = this._intersectsWithPointer(s), n && s.instance === this.currentContainer && o !== this.currentItem[0] && this.placeholder[1 === n ? "next" : "prev"]()[0] !== o && !t.contains(this.placeholder[0], o) && ("semi-dynamic" === this.options.type ? !t.contains(this.element[0], o) : !0)) {
					if(this.direction = 1 === n ? "down" : "up", "pointer" !== this.options.tolerance && !this._intersectsWithSides(s)) break;
					this._rearrange(e, s), this._trigger("change", e, this._uiHash());
					break
				}
			return this._contactContainers(e), t.ui.ddmanager && t.ui.ddmanager.drag(this, e), this._trigger("sort", e, this._uiHash()), this.lastPositionAbs = this.positionAbs, !1
		},
		_mouseStop: function(e, i) {
			if(e) {
				if(t.ui.ddmanager && !this.options.dropBehaviour && t.ui.ddmanager.drop(this, e), this.options.revert) {
					var s = this,
						o = this.placeholder.offset(),
						n = this.options.axis,
						r = {};
					n && "x" !== n || (r.left = o.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft)), n && "y" !== n || (r.top = o.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop)), this.reverting = !0, t(this.helper).animate(r, parseInt(this.options.revert, 10) || 500, function() {
						s._clear(e)
					})
				} else this._clear(e, i);
				return !1
			}
		},
		cancel: function() {
			if(this.dragging) {
				this._mouseUp({
					target: null
				}), "original" === this.options.helper ? this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper") : this.currentItem.show();
				for(var e = this.containers.length - 1; e >= 0; e--) this.containers[e]._trigger("deactivate", null, this._uiHash(this)), this.containers[e].containerCache.over && (this.containers[e]._trigger("out", null, this._uiHash(this)), this.containers[e].containerCache.over = 0)
			}
			return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]), "original" !== this.options.helper && this.helper && this.helper[0].parentNode && this.helper.remove(), t.extend(this, {
				helper: null,
				dragging: !1,
				reverting: !1,
				_noFinalSort: null
			}), this.domPosition.prev ? t(this.domPosition.prev).after(this.currentItem) : t(this.domPosition.parent).prepend(this.currentItem)), this
		},
		serialize: function(e) {
			var i = this._getItemsAsjQuery(e && e.connected),
				s = [];
			return e = e || {}, t(i).each(function() {
				var i = (t(e.item || this).attr(e.attribute || "id") || "").match(e.expression || /(.+)[\-=_](.+)/);
				i && s.push((e.key || i[1] + "[]") + "=" + (e.key && e.expression ? i[1] : i[2]))
			}), !s.length && e.key && s.push(e.key + "="), s.join("&")
		},
		toArray: function(e) {
			var i = this._getItemsAsjQuery(e && e.connected),
				s = [];
			return e = e || {}, i.each(function() {
				s.push(t(e.item || this).attr(e.attribute || "id") || "")
			}), s
		},
		_intersectsWith: function(t) {
			var e = this.positionAbs.left,
				i = e + this.helperProportions.width,
				s = this.positionAbs.top,
				o = s + this.helperProportions.height,
				n = t.left,
				r = n + t.width,
				a = t.top,
				h = a + t.height,
				l = this.offset.click.top,
				c = this.offset.click.left,
				p = "x" === this.options.axis || s + l > a && h > s + l,
				f = "y" === this.options.axis || e + c > n && r > e + c,
				u = p && f;
			return "pointer" === this.options.tolerance || this.options.forcePointerForContainers || "pointer" !== this.options.tolerance && this.helperProportions[this.floating ? "width" : "height"] > t[this.floating ? "width" : "height"] ? u : n < e + this.helperProportions.width / 2 && i - this.helperProportions.width / 2 < r && a < s + this.helperProportions.height / 2 && o - this.helperProportions.height / 2 < h
		},
		_intersectsWithPointer: function(t) {
			var i = "x" === this.options.axis || e(this.positionAbs.top + this.offset.click.top, t.top, t.height),
				s = "y" === this.options.axis || e(this.positionAbs.left + this.offset.click.left, t.left, t.width),
				o = i && s,
				n = this._getDragVerticalDirection(),
				r = this._getDragHorizontalDirection();
			return o ? this.floating ? r && "right" === r || "down" === n ? 2 : 1 : n && ("down" === n ? 2 : 1) : !1
		},
		_intersectsWithSides: function(t) {
			var i = e(this.positionAbs.top + this.offset.click.top, t.top + t.height / 2, t.height),
				s = e(this.positionAbs.left + this.offset.click.left, t.left + t.width / 2, t.width),
				o = this._getDragVerticalDirection(),
				n = this._getDragHorizontalDirection();
			return this.floating && n ? "right" === n && s || "left" === n && !s : o && ("down" === o && i || "up" === o && !i)
		},
		_getDragVerticalDirection: function() {
			var t = this.positionAbs.top - this.lastPositionAbs.top;
			return 0 !== t && (t > 0 ? "down" : "up")
		},
		_getDragHorizontalDirection: function() {
			var t = this.positionAbs.left - this.lastPositionAbs.left;
			return 0 !== t && (t > 0 ? "right" : "left")
		},
		refresh: function(t) {
			return this._refreshItems(t), this.refreshPositions(), this
		},
		_connectWith: function() {
			var t = this.options;
			return t.connectWith.constructor === String ? [t.connectWith] : t.connectWith
		},
		_getItemsAsjQuery: function(e) {
			var i, s, o, n, r = [],
				a = [],
				h = this._connectWith();
			if(h && e)
				for(i = h.length - 1; i >= 0; i--)
					for(o = t(h[i]), s = o.length - 1; s >= 0; s--) n = t.data(o[s], this.widgetFullName), n && n !== this && !n.options.disabled && a.push([t.isFunction(n.options.items) ? n.options.items.call(n.element) : t(n.options.items, n.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), n]);
			for(a.push([t.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
					options: this.options,
					item: this.currentItem
				}) : t(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]), i = a.length - 1; i >= 0; i--) a[i][0].each(function() {
				r.push(this)
			});
			return t(r)
		},
		_removeCurrentsFromItems: function() {
			var e = this.currentItem.find(":data(" + this.widgetName + "-item)");
			this.items = t.grep(this.items, function(t) {
				for(var i = 0; i < e.length; i++)
					if(e[i] === t.item[0]) return !1;
				return !0
			})
		},
		_refreshItems: function(e) {
			this.items = [], this.containers = [this];
			var i, s, o, n, r, a, h, l, c = this.items,
				p = [
					[t.isFunction(this.options.items) ? this.options.items.call(this.element[0], e, {
						item: this.currentItem
					}) : t(this.options.items, this.element), this]
				],
				f = this._connectWith();
			if(f && this.ready)
				for(i = f.length - 1; i >= 0; i--)
					for(o = t(f[i]), s = o.length - 1; s >= 0; s--) n = t.data(o[s], this.widgetFullName), n && n !== this && !n.options.disabled && (p.push([t.isFunction(n.options.items) ? n.options.items.call(n.element[0], e, {
						item: this.currentItem
					}) : t(n.options.items, n.element), n]), this.containers.push(n));
			for(i = p.length - 1; i >= 0; i--)
				for(r = p[i][1], a = p[i][0], s = 0, l = a.length; l > s; s++) h = t(a[s]), h.data(this.widgetName + "-item", r), c.push({
					item: h,
					instance: r,
					width: 0,
					height: 0,
					left: 0,
					top: 0
				})
		},
		refreshPositions: function(e) {
			this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset());
			var i, s, o, n;
			for(i = this.items.length - 1; i >= 0; i--) s = this.items[i], s.instance !== this.currentContainer && this.currentContainer && s.item[0] !== this.currentItem[0] || (o = this.options.toleranceElement ? t(this.options.toleranceElement, s.item) : s.item, e || (s.width = o.outerWidth(), s.height = o.outerHeight()), n = o.offset(), s.left = n.left, s.top = n.top);
			if(this.options.custom && this.options.custom.refreshContainers) this.options.custom.refreshContainers.call(this);
			else
				for(i = this.containers.length - 1; i >= 0; i--) n = this.containers[i].element.offset(), this.containers[i].containerCache.left = n.left, this.containers[i].containerCache.top = n.top, this.containers[i].containerCache.width = this.containers[i].element.outerWidth(), this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
			return this
		},
		_createPlaceholder: function(e) {
			e = e || this;
			var i, s = e.options;
			s.placeholder && s.placeholder.constructor !== String || (i = s.placeholder, s.placeholder = {
				element: function() {
					var s = e.currentItem[0].nodeName.toLowerCase(),
						o = t("<" + s + ">", e.document[0]).addClass(i || e.currentItem[0].className + " ui-sortable-placeholder").removeClass("ui-sortable-helper");
					return "tr" === s ? e.currentItem.children().each(function() {
						t("<td>&#160;</td>", e.document[0]).attr("colspan", t(this).attr("colspan") || 1).appendTo(o)
					}) : "img" === s && o.attr("src", e.currentItem.attr("src")), i || o.css("visibility", "hidden"), o
				},
				update: function(t, o) {
					(!i || s.forcePlaceholderSize) && (o.height() || o.height(e.currentItem.innerHeight() - parseInt(e.currentItem.css("paddingTop") || 0, 10) - parseInt(e.currentItem.css("paddingBottom") || 0, 10)), o.width() || o.width(e.currentItem.innerWidth() - parseInt(e.currentItem.css("paddingLeft") || 0, 10) - parseInt(e.currentItem.css("paddingRight") || 0, 10)))
				}
			}), e.placeholder = t(s.placeholder.element.call(e.element, e.currentItem)), e.currentItem.after(e.placeholder), s.placeholder.update(e, e.placeholder)
		},
		_contactContainers: function(s) {
			var o, n, r, a, h, l, c, p, f, u, d = null,
				g = null;
			for(o = this.containers.length - 1; o >= 0; o--)
				if(!t.contains(this.currentItem[0], this.containers[o].element[0]))
					if(this._intersectsWith(this.containers[o].containerCache)) {
						if(d && t.contains(this.containers[o].element[0], d.element[0])) continue;
						d = this.containers[o], g = o
					} else this.containers[o].containerCache.over && (this.containers[o]._trigger("out", s, this._uiHash(this)), this.containers[o].containerCache.over = 0);
			if(d)
				if(1 === this.containers.length) this.containers[g].containerCache.over || (this.containers[g]._trigger("over", s, this._uiHash(this)), this.containers[g].containerCache.over = 1);
				else {
					for(r = 1e4, a = null, u = d.floating || i(this.currentItem), h = u ? "left" : "top", l = u ? "width" : "height", c = this.positionAbs[h] + this.offset.click[h], n = this.items.length - 1; n >= 0; n--) t.contains(this.containers[g].element[0], this.items[n].item[0]) && this.items[n].item[0] !== this.currentItem[0] && (!u || e(this.positionAbs.top + this.offset.click.top, this.items[n].top, this.items[n].height)) && (p = this.items[n].item.offset()[h], f = !1, Math.abs(p - c) > Math.abs(p + this.items[n][l] - c) && (f = !0, p += this.items[n][l]), Math.abs(p - c) < r && (r = Math.abs(p - c), a = this.items[n], this.direction = f ? "up" : "down"));
					if(!a && !this.options.dropOnEmpty) return;
					if(this.currentContainer === this.containers[g]) return;
					a ? this._rearrange(s, a, null, !0) : this._rearrange(s, null, this.containers[g].element, !0), this._trigger("change", s, this._uiHash()), this.containers[g]._trigger("change", s, this._uiHash(this)), this.currentContainer = this.containers[g], this.options.placeholder.update(this.currentContainer, this.placeholder), this.containers[g]._trigger("over", s, this._uiHash(this)), this.containers[g].containerCache.over = 1
				}
		},
		_createHelper: function(e) {
			var i = this.options,
				s = t.isFunction(i.helper) ? t(i.helper.apply(this.element[0], [e, this.currentItem])) : "clone" === i.helper ? this.currentItem.clone() : this.currentItem;
			return s.parents("body").length || t("parent" !== i.appendTo ? i.appendTo : this.currentItem[0].parentNode)[0].appendChild(s[0]), s[0] === this.currentItem[0] && (this._storedCSS = {
				width: this.currentItem[0].style.width,
				height: this.currentItem[0].style.height,
				position: this.currentItem.css("position"),
				top: this.currentItem.css("top"),
				left: this.currentItem.css("left")
			}), (!s[0].style.width || i.forceHelperSize) && s.width(this.currentItem.width()), (!s[0].style.height || i.forceHelperSize) && s.height(this.currentItem.height()), s
		},
		_adjustOffsetFromHelper: function(e) {
			"string" == typeof e && (e = e.split(" ")), t.isArray(e) && (e = {
				left: +e[0],
				top: +e[1] || 0
			}), "left" in e && (this.offset.click.left = e.left + this.margins.left), "right" in e && (this.offset.click.left = this.helperProportions.width - e.right + this.margins.left), "top" in e && (this.offset.click.top = e.top + this.margins.top), "bottom" in e && (this.offset.click.top = this.helperProportions.height - e.bottom + this.margins.top)
		},
		_getParentOffset: function() {
			this.offsetParent = this.helper.offsetParent();
			var e = this.offsetParent.offset();
			return "absolute" === this.cssPosition && this.scrollParent[0] !== document && t.contains(this.scrollParent[0], this.offsetParent[0]) && (e.left += this.scrollParent.scrollLeft(), e.top += this.scrollParent.scrollTop()), (this.offsetParent[0] === document.body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() && t.ui.ie) && (e = {
				top: 0,
				left: 0
			}), {
				top: e.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
				left: e.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
			}
		},
		_getRelativeOffset: function() {
			if("relative" === this.cssPosition) {
				var t = this.currentItem.position();
				return {
					top: t.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
					left: t.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
				}
			}
			return {
				top: 0,
				left: 0
			}
		},
		_cacheMargins: function() {
			this.margins = {
				left: parseInt(this.currentItem.css("marginLeft"), 10) || 0,
				top: parseInt(this.currentItem.css("marginTop"), 10) || 0
			}
		},
		_cacheHelperProportions: function() {
			this.helperProportions = {
				width: this.helper.outerWidth(),
				height: this.helper.outerHeight()
			}
		},
		_setContainment: function() {
			var e, i, s, o = this.options;
			"parent" === o.containment && (o.containment = this.helper[0].parentNode), ("document" === o.containment || "window" === o.containment) && (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, t("document" === o.containment ? document : window).width() - this.helperProportions.width - this.margins.left, (t("document" === o.containment ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), /^(document|window|parent)$/.test(o.containment) || (e = t(o.containment)[0], i = t(o.containment).offset(), s = "hidden" !== t(e).css("overflow"), this.containment = [i.left + (parseInt(t(e).css("borderLeftWidth"), 10) || 0) + (parseInt(t(e).css("paddingLeft"), 10) || 0) - this.margins.left, i.top + (parseInt(t(e).css("borderTopWidth"), 10) || 0) + (parseInt(t(e).css("paddingTop"), 10) || 0) - this.margins.top, i.left + (s ? Math.max(e.scrollWidth, e.offsetWidth) : e.offsetWidth) - (parseInt(t(e).css("borderLeftWidth"), 10) || 0) - (parseInt(t(e).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, i.top + (s ? Math.max(e.scrollHeight, e.offsetHeight) : e.offsetHeight) - (parseInt(t(e).css("borderTopWidth"), 10) || 0) - (parseInt(t(e).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top])
		},
		_convertPositionTo: function(e, i) {
			i || (i = this.position);
			var s = "absolute" === e ? 1 : -1,
				o = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && t.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
				n = /(html|body)/i.test(o[0].tagName);
			return {
				top: i.top + this.offset.relative.top * s + this.offset.parent.top * s - ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : n ? 0 : o.scrollTop()) * s,
				left: i.left + this.offset.relative.left * s + this.offset.parent.left * s - ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : n ? 0 : o.scrollLeft()) * s
			}
		},
		_generatePosition: function(e) {
			var i, s, o = this.options,
				n = e.pageX,
				r = e.pageY,
				a = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && t.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
				h = /(html|body)/i.test(a[0].tagName);
			return "relative" !== this.cssPosition || this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0] || (this.offset.relative = this._getRelativeOffset()), this.originalPosition && (this.containment && (e.pageX - this.offset.click.left < this.containment[0] && (n = this.containment[0] + this.offset.click.left), e.pageY - this.offset.click.top < this.containment[1] && (r = this.containment[1] + this.offset.click.top), e.pageX - this.offset.click.left > this.containment[2] && (n = this.containment[2] + this.offset.click.left), e.pageY - this.offset.click.top > this.containment[3] && (r = this.containment[3] + this.offset.click.top)), o.grid && (i = this.originalPageY + Math.round((r - this.originalPageY) / o.grid[1]) * o.grid[1], r = this.containment ? i - this.offset.click.top >= this.containment[1] && i - this.offset.click.top <= this.containment[3] ? i : i - this.offset.click.top >= this.containment[1] ? i - o.grid[1] : i + o.grid[1] : i, s = this.originalPageX + Math.round((n - this.originalPageX) / o.grid[0]) * o.grid[0], n = this.containment ? s - this.offset.click.left >= this.containment[0] && s - this.offset.click.left <= this.containment[2] ? s : s - this.offset.click.left >= this.containment[0] ? s - o.grid[0] : s + o.grid[0] : s)), {
				top: r - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : h ? 0 : a.scrollTop()),
				left: n - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : h ? 0 : a.scrollLeft())
			}
		},
		_rearrange: function(t, e, i, s) {
			i ? i[0].appendChild(this.placeholder[0]) : e.item[0].parentNode.insertBefore(this.placeholder[0], "down" === this.direction ? e.item[0] : e.item[0].nextSibling), this.counter = this.counter ? ++this.counter : 1;
			var o = this.counter;
			this._delay(function() {
				o === this.counter && this.refreshPositions(!s)
			})
		},
		_clear: function(t, e) {
			this.reverting = !1;
			var i, s = [];
			if(!this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null, this.helper[0] === this.currentItem[0]) {
				for(i in this._storedCSS)("auto" === this._storedCSS[i] || "static" === this._storedCSS[i]) && (this._storedCSS[i] = "");
				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")
			} else this.currentItem.show();
			for(this.fromOutside && !e && s.push(function(t) {
					this._trigger("receive", t, this._uiHash(this.fromOutside))
				}), !this.fromOutside && this.domPosition.prev === this.currentItem.prev().not(".ui-sortable-helper")[0] && this.domPosition.parent === this.currentItem.parent()[0] || e || s.push(function(t) {
					this._trigger("update", t, this._uiHash())
				}), this !== this.currentContainer && (e || (s.push(function(t) {
					this._trigger("remove", t, this._uiHash())
				}), s.push(function(t) {
					return function(e) {
						t._trigger("receive", e, this._uiHash(this))
					}
				}.call(this, this.currentContainer)), s.push(function(t) {
					return function(e) {
						t._trigger("update", e, this._uiHash(this))
					}
				}.call(this, this.currentContainer)))), i = this.containers.length - 1; i >= 0; i--) e || s.push(function(t) {
				return function(e) {
					t._trigger("deactivate", e, this._uiHash(this))
				}
			}.call(this, this.containers[i])), this.containers[i].containerCache.over && (s.push(function(t) {
				return function(e) {
					t._trigger("out", e, this._uiHash(this))
				}
			}.call(this, this.containers[i])), this.containers[i].containerCache.over = 0);
			if(this.storedCursor && (this.document.find("body").css("cursor", this.storedCursor), this.storedStylesheet.remove()), this._storedOpacity && this.helper.css("opacity", this._storedOpacity), this._storedZIndex && this.helper.css("zIndex", "auto" === this._storedZIndex ? "" : this._storedZIndex), this.dragging = !1, this.cancelHelperRemoval) {
				if(!e) {
					for(this._trigger("beforeStop", t, this._uiHash()), i = 0; i < s.length; i++) s[i].call(this, t);
					this._trigger("stop", t, this._uiHash())
				}
				return this.fromOutside = !1, !1
			}
			if(e || this._trigger("beforeStop", t, this._uiHash()), this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.helper[0] !== this.currentItem[0] && this.helper.remove(), this.helper = null, !e) {
				for(i = 0; i < s.length; i++) s[i].call(this, t);
				this._trigger("stop", t, this._uiHash())
			}
			return this.fromOutside = !1, !0
		},
		_trigger: function() {
			t.Widget.prototype._trigger.apply(this, arguments) === !1 && this.cancel()
		},
		_uiHash: function(e) {
			var i = e || this;
			return {
				helper: i.helper,
				placeholder: i.placeholder || t([]),
				position: i.position,
				originalPosition: i.originalPosition,
				offset: i.positionAbs,
				item: i.currentItem,
				sender: e ? e.element : null
			}
		}
	})
}(jQuery);
! function(e) {
	function t(e, t, i) {
		return e > t && t + i > e
	}
	e.widget("ui.droppable", {
		version: "1.10.4",
		widgetEventPrefix: "drop",
		options: {
			accept: "*",
			activeClass: !1,
			addClasses: !0,
			greedy: !1,
			hoverClass: !1,
			scope: "default",
			tolerance: "intersect",
			activate: null,
			deactivate: null,
			drop: null,
			out: null,
			over: null
		},
		_create: function() {
			var t, i = this.options,
				s = i.accept;
			this.isover = !1, this.isout = !0, this.accept = e.isFunction(s) ? s : function(e) {
				return e.is(s)
			}, this.proportions = function() {
				return arguments.length ? (t = arguments[0], void 0) : t ? t : t = {
					width: this.element[0].offsetWidth,
					height: this.element[0].offsetHeight
				}
			}, e.ui.ddmanager.droppables[i.scope] = e.ui.ddmanager.droppables[i.scope] || [], e.ui.ddmanager.droppables[i.scope].push(this), i.addClasses && this.element.addClass("ui-droppable")
		},
		_destroy: function() {
			for(var t = 0, i = e.ui.ddmanager.droppables[this.options.scope]; t < i.length; t++) i[t] === this && i.splice(t, 1);
			this.element.removeClass("ui-droppable ui-droppable-disabled")
		},
		_setOption: function(t, i) {
			"accept" === t && (this.accept = e.isFunction(i) ? i : function(e) {
				return e.is(i)
			}), e.Widget.prototype._setOption.apply(this, arguments)
		},
		_activate: function(t) {
			var i = e.ui.ddmanager.current;
			this.options.activeClass && this.element.addClass(this.options.activeClass), i && this._trigger("activate", t, this.ui(i))
		},
		_deactivate: function(t) {
			var i = e.ui.ddmanager.current;
			this.options.activeClass && this.element.removeClass(this.options.activeClass), i && this._trigger("deactivate", t, this.ui(i))
		},
		_over: function(t) {
			var i = e.ui.ddmanager.current;
			i && (i.currentItem || i.element)[0] !== this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this.options.hoverClass && this.element.addClass(this.options.hoverClass), this._trigger("over", t, this.ui(i)))
		},
		_out: function(t) {
			var i = e.ui.ddmanager.current;
			i && (i.currentItem || i.element)[0] !== this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("out", t, this.ui(i)))
		},
		_drop: function(t, i) {
			var s = i || e.ui.ddmanager.current,
				o = !1;
			return s && (s.currentItem || s.element)[0] !== this.element[0] ? (this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
				var t = e.data(this, "ui-droppable");
				return t.options.greedy && !t.options.disabled && t.options.scope === s.options.scope && t.accept.call(t.element[0], s.currentItem || s.element) && e.ui.intersect(s, e.extend(t, {
					offset: t.element.offset()
				}), t.options.tolerance) ? (o = !0, !1) : void 0
			}), o ? !1 : this.accept.call(this.element[0], s.currentItem || s.element) ? (this.options.activeClass && this.element.removeClass(this.options.activeClass), this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("drop", t, this.ui(s)), this.element) : !1) : !1
		},
		ui: function(e) {
			return {
				draggable: e.currentItem || e.element,
				helper: e.helper,
				position: e.position,
				offset: e.positionAbs
			}
		}
	}), e.ui.intersect = function(e, i, s) {
		if(!i.offset) return !1;
		var o, n, r = (e.positionAbs || e.position.absolute).left,
			a = (e.positionAbs || e.position.absolute).top,
			l = r + e.helperProportions.width,
			p = a + e.helperProportions.height,
			h = i.offset.left,
			c = i.offset.top,
			u = h + i.proportions().width,
			d = c + i.proportions().height;
		switch(s) {
			case "fit":
				return r >= h && u >= l && a >= c && d >= p;
			case "intersect":
				return h < r + e.helperProportions.width / 2 && l - e.helperProportions.width / 2 < u && c < a + e.helperProportions.height / 2 && p - e.helperProportions.height / 2 < d;
			case "pointer":
				return o = (e.positionAbs || e.position.absolute).left + (e.clickOffset || e.offset.click).left, n = (e.positionAbs || e.position.absolute).top + (e.clickOffset || e.offset.click).top, t(n, c, i.proportions().height) && t(o, h, i.proportions().width);
			case "touch":
				return(a >= c && d >= a || p >= c && d >= p || c > a && p > d) && (r >= h && u >= r || l >= h && u >= l || h > r && l > u);
			default:
				return !1
		}
	}, e.ui.ddmanager = {
		current: null,
		droppables: {
			"default": []
		},
		prepareOffsets: function(t, i) {
			var s, o, n = e.ui.ddmanager.droppables[t.options.scope] || [],
				r = i ? i.type : null,
				a = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
			e: for(s = 0; s < n.length; s++)
				if(!(n[s].options.disabled || t && !n[s].accept.call(n[s].element[0], t.currentItem || t.element))) {
					for(o = 0; o < a.length; o++)
						if(a[o] === n[s].element[0]) {
							n[s].proportions().height = 0;
							continue e
						}
					n[s].visible = "none" !== n[s].element.css("display"), n[s].visible && ("mousedown" === r && n[s]._activate.call(n[s], i), n[s].offset = n[s].element.offset(), n[s].proportions({
						width: n[s].element[0].offsetWidth,
						height: n[s].element[0].offsetHeight
					}))
				}
		},
		drop: function(t, i) {
			var s = !1;
			return e.each((e.ui.ddmanager.droppables[t.options.scope] || []).slice(), function() {
				this.options && (!this.options.disabled && this.visible && e.ui.intersect(t, this, this.options.tolerance) && (s = this._drop.call(this, i) || s), !this.options.disabled && this.visible && this.accept.call(this.element[0], t.currentItem || t.element) && (this.isout = !0, this.isover = !1, this._deactivate.call(this, i)))
			}), s
		},
		dragStart: function(t, i) {
			t.element.parentsUntil("body").bind("scroll.droppable", function() {
				t.options.refreshPositions || e.ui.ddmanager.prepareOffsets(t, i)
			})
		},
		drag: function(t, i) {
			t.options.refreshPositions && e.ui.ddmanager.prepareOffsets(t, i), e.each(e.ui.ddmanager.droppables[t.options.scope] || [], function() {
				if(!this.options.disabled && !this.greedyChild && this.visible) {
					var s, o, n, r = e.ui.intersect(t, this, this.options.tolerance),
						a = !r && this.isover ? "isout" : r && !this.isover ? "isover" : null;
					a && (this.options.greedy && (o = this.options.scope, n = this.element.parents(":data(ui-droppable)").filter(function() {
						return e.data(this, "ui-droppable").options.scope === o
					}), n.length && (s = e.data(n[0], "ui-droppable"), s.greedyChild = "isover" === a)), s && "isover" === a && (s.isover = !1, s.isout = !0, s._out.call(s, i)), this[a] = !0, this["isout" === a ? "isover" : "isout"] = !1, this["isover" === a ? "_over" : "_out"].call(this, i), s && "isout" === a && (s.isout = !1, s.isover = !0, s._over.call(s, i)))
				}
			})
		},
		dragStop: function(t, i) {
			t.element.parentsUntil("body").unbind("scroll.droppable"), t.options.refreshPositions || e.ui.ddmanager.prepareOffsets(t, i)
		}
	}
}(jQuery);
! function(e, t, o, i) {
	var n = e(t);
	e.fn.lazyload = function(r) {
		function f() {
			var t = 0;
			a.each(function() {
				var o = e(this);
				if(!h.skip_invisible || o.is(":visible"))
					if(e.abovethetop(this, h) || e.leftofbegin(this, h));
					else if(e.belowthefold(this, h) || e.rightoffold(this, h)) {
					if(++t > h.failure_limit) return !1
				} else o.trigger("appear"), t = 0
			})
		}
		var l, a = this,
			h = {
				threshold: 0,
				failure_limit: 0,
				event: "scroll",
				effect: "show",
				container: t,
				data_attribute: "original",
				skip_invisible: !1,
				appear: null,
				process: null,
				load: null,
				placeholder: ""
			};
		return r && (i !== r.failurelimit && (r.failure_limit = r.failurelimit, delete r.failurelimit), i !== r.effectspeed && (r.effect_speed = r.effectspeed, delete r.effectspeed), e.extend(h, r)), l = h.container === i || h.container === t ? n : e(h.container), 0 === h.event.indexOf("scroll") && l.bind(h.event, function() {
			return f()
		}), this.each(function() {
			var t = this,
				o = e(t);
			t.loaded = !1, (o.attr("src") === i || o.attr("src") === !1) && o.is("img") && o.attr("src", h.placeholder), o.one("appear", function() {
				if(!this.loaded) {
					if(h.appear) {
						var i = a.length;
						h.appear.call(t, i, h)
					}
					e("<img />").bind("load", function() {
						var i = o.attr("data-" + h.data_attribute);
						o.hide(), h.process && h.process.call(t, o, this), o.is("img") ? o.attr("src", i) : o.css("background-image", "url('" + i + "')"), o[h.effect](h.effect_speed), t.loaded = !0;
						var n = e.grep(a, function(e) {
							return !e.loaded
						});
						if(a = e(n), h.load) {
							var r = a.length;
							h.load.call(t, r, h)
						}
					}).attr("src", o.attr("data-" + h.data_attribute))
				}
			}), 0 !== h.event.indexOf("scroll") && o.bind(h.event, function() {
				t.loaded || o.trigger("appear")
			})
		}), n.bind("resize", function() {
			f()
		}), /(?:iphone|ipod|ipad).*os 5/gi.test(navigator.appVersion) && n.bind("pageshow", function(t) {
			t.originalEvent && t.originalEvent.persisted && a.each(function() {
				e(this).trigger("appear")
			})
		}), e(o).ready(function() {
			f()
		}), this
	}, e.belowthefold = function(o, r) {
		var f;
		return f = r.container === i || r.container === t ? (t.innerHeight ? t.innerHeight : n.height()) + n.scrollTop() : e(r.container).offset().top + e(r.container).height(), f <= e(o).offset().top - r.threshold
	}, e.rightoffold = function(o, r) {
		var f;
		return f = r.container === i || r.container === t ? n.width() + n.scrollLeft() : e(r.container).offset().left + e(r.container).width(), f <= e(o).offset().left - r.threshold
	}, e.abovethetop = function(o, r) {
		var f;
		return f = r.container === i || r.container === t ? n.scrollTop() : e(r.container).offset().top, f >= e(o).offset().top + r.threshold + e(o).height()
	}, e.leftofbegin = function(o, r) {
		var f;
		return f = r.container === i || r.container === t ? n.scrollLeft() : e(r.container).offset().left, f >= e(o).offset().left + r.threshold + e(o).width()
	}, e.inviewport = function(t, o) {
		return !(e.rightoffold(t, o) || e.leftofbegin(t, o) || e.belowthefold(t, o) || e.abovethetop(t, o))
	}, e.extend(e.expr[":"], {
		"below-the-fold": function(t) {
			return e.belowthefold(t, {
				threshold: 0
			})
		},
		"above-the-top": function(t) {
			return !e.belowthefold(t, {
				threshold: 0
			})
		},
		"right-of-screen": function(t) {
			return e.rightoffold(t, {
				threshold: 0
			})
		},
		"left-of-screen": function(t) {
			return !e.rightoffold(t, {
				threshold: 0
			})
		},
		"in-viewport": function(t) {
			return e.inviewport(t, {
				threshold: 0
			})
		},
		"above-the-fold": function(t) {
			return !e.belowthefold(t, {
				threshold: 0
			})
		},
		"right-of-fold": function(t) {
			return e.rightoffold(t, {
				threshold: 0
			})
		},
		"left-of-fold": function(t) {
			return !e.rightoffold(t, {
				threshold: 0
			})
		}
	})
}(jQuery, window, document);
! function() {
	function t(t, e) {
		if(t instanceof Array) {
			for(var n = 0, i = t.length; i > n; n++)
				if(e.call(t[n], t[n], n) === !1) return
		} else
			for(var n in t)
				if(t.hasOwnProperty(n) && e.call(t[n], t[n], n) === !1) return
	}

	function e(t, e) {
		if(Array.prototype.indexOf) return t.indexOf(e);
		for(var n = 0, i = t.length; i > n; n++)
			if(t[n] === e) return n;
		return -1
	}

	function n(e, n) {
		if(Array.prototype.filter) return e.filter(n);
		var i = [];
		return t(e, function(t, e, a) {
			n(t, e, a) && i.push(t)
		}), i
	}

	function i(t, e) {
		return n(e, function(e) {
			return !r.loadingPaths[e] || !a(r.cache[e], t, [])
		})
	}

	function a(t, n, i) {
		if(!t || t._loaded) return !1;
		i.push(t.name);
		var s = t.deps || [];
		if(s.length) {
			if(e(s, n) > -1) return !0;
			for(var o = 0; o < s.length; o++)
				if(e(i, s[o]) < 0 && a(r.cache[s[o]], n, i)) return !0;
			return !1
		}
		return !1
	}

	function r(t, e) {
		this.name = e, this.path = t, this.fn = null, this.exports = {}, this._loaded = !1, this._requiredStack = [], this._readyStack = [], r.cache[this.name] = this
	}

	function s(t) {
		var e = d(t);
		return r.initingPaths[t] || e.init(), e.exports
	}

	function o(e) {
		var n = !0;
		return t(e, function(t) {
			return t in r.loadedPaths ? void 0 : n = !1
		}), n
	}

	function h(t) {
		return u.baseUrl ? u.baseUrl + t : t
	}

	function d(t) {
		var e = t.indexOf(":") > -1 ? t : h(t);
		return r.cache[t] ? r.cache[t] : new r(e, t)
	}
	var c = {
			version: "2.0.0",
			debug: !1
		},
		u = {
			baseUrl: void 0
		};
	r.loadedPaths = {}, r.loadingPaths = {}, r.initingPaths = {}, r.cache = {}, r.paths = {}, r.moduleFileMap = {}, r.requiredPaths = {}, r.lazyLoadPaths = {}, r.prototype = {
		init: function() {
			if(!this._inited) {
				if(this._inited = !0, !this.fn) throw new Error('Module "' + this.name + '" not found!');
				var t;
				r.initingPaths[this.name] = !0, (t = this.fn.call(null, s, this.exports)) && (this.exports = t), r.initingPaths[this.name] = !1
			}
		},
		load: function() {
			r.loadingPaths[this.path] = !0;
			var t = r.moduleFileMap[this.name] || this.path;
			f.create({
				src: t
			})
		},
		lazyLoad: function() {
			var t = this.name,
				e = this.path;
			r.lazyLoadPaths[t] ? (this.define(), delete r.lazyLoadPaths[t]) : r.loadedPaths[e] ? this.triggerStack() : r.loadingPaths[e] || (r.requiredPaths[this.name] = !0, this.load())
		},
		ready: function(t, e) {
			var n = e ? this._requiredStack : this._readyStack;
			t ? this._loaded ? (this.init(), t()) : n.push(t) : (this._loaded = !0, r.loadedPaths[this.path] = !0, delete r.loadingPaths[this.path], this.triggerStack())
		},
		triggerStack: function() {
			this._readyStack.length > 0 && (this.init(), t(this._readyStack, function(t) {
				t.doing || (t.doing = !0, t())
			}), this._readyStack = []), this._requiredStack.length > 0 && (t(this._requiredStack, function(t) {
				t.doing || (t.doing = !0, t())
			}), this._requiredStack = [])
		},
		define: function() {
			var e = this,
				n = this.deps,
				a = [];
			!n && c.debug && (this.deps = getDependents(e.fn)), n = i(e.path, this.deps), n.length ? (r.loadingPaths[this.path] = !0, t(n, function(t) {
				var e = d(t);
				a.push(e.path)
			}), t(n, function(t) {
				var n = d(t);
				n.ready(function() {
					o(a) && e.ready()
				}, !0), n.lazyLoad()
			})) : this.ready()
		}
	};
	var l = {
			_paths: [],
			_domain: [],
			create: function(t) {
				if(!(t.src in this._paths)) {
					this._paths[t.src] = !0;
					var e = document.getElementsByTagName("head")[0],
						n = document.createElement("link");
					t.charset && (n.charset = t.charset), n.href = this._domain + "/" + t.src, n.rel = "stylesheet", e.insertBefore(n, e.firstChild)
				}
			},
			setDomain: function(t) {
				this._domain = t
			}
		},
		f = {
			create: function(e) {
				return
				
				if(!(e.src in this._paths)) {
					
				
					this._paths[e.src] = !0, t(this._rules, function(t) {
						t.call(null, e)
					});
					var n = document.getElementsByTagName("head")[0],
						i = document.createElement("script");
						
					i.type = e.type || "text/javascript", e.charset && (i.charset = e.charset), i.src = e.src, i.onload = i.onerror = i.onreadystatechange = function() {
						this.readyState && "loaded" !== this.readyState && "complete" !== this.readyState || (i.onload = i.onerror = i.onreadystatechange = null, i.parentNode && !c.debug && n.removeChild(i), i = void 0, e.loaded && e.loaded())
					}, n.insertBefore(i, n.firstChild)
				}
			},
			_paths: {},
			_rules: [],
			addPathRule: function(t) {
				this._rules.push(t)
			}
		};
	c.use = function(e, n) {
		"string" == typeof e && (e = [e]);
		var i = [],
			a = [];
		t(e, function(t, e) {
			a[e] = !1
		}), t(e, function(e, r) {
			var s = d(e);
			s.ready(function() {
				i[r] = s.exports, a[r] = !0;
				var e = !0;
				t(a, function(t) {
					return t === !1 ? e = !1 : void 0
				}), n && e && n.apply(null, i)
			}), s.lazyLoad()
		})
	}, c.loadCss = function(t) {
		l.create({
			src: t
		})
	}, s.async = c.use, c.require = s, c.module = function(t, e, n) {
		var i = d(t);
		i.fn = e, i.deps = n || [], r.requiredPaths[t] ? i.define() : r.lazyLoadPaths[t] = !0
	}, c.pathRule = function(t) {
		f.addPathRule(t)
	}, c.setDomain = function(t) {
		l.setDomain(t)
	}, c._fileMap = function(e, n) {
		"object" == typeof e ? t(e, function(t, e) {
			c._fileMap(e, t)
		}) : ("string" == typeof n && (n = [n]), t(n, function(t) {
			r.moduleFileMap[t] = e
		}))
	}, c.config = function(t) {
		var e = t.baseUrl;
		"string" == typeof e && (e && "/" == e.charAt(e.length - 1) && (e = e.substr(0, e.length - 1)), u.baseUrl = e)
	}, "F" in window || (window.F = c)
}();
! function() {
	var _after = 1,
		_afterThrow = 2,
		_afterFinally = 3,
		_before = 4,
		_around = 5,
		_intro = 6,
		_regexEnabled = !0,
		_arguments = "arguments",
		_undef = "undefined",
		getType = function() {
			for(var e = Object.prototype.toString, t = {}, r = {
					1: "element",
					3: "textnode",
					9: "document",
					11: "fragment"
				}, n = "Arguments Array Boolean Date Document Element Error Fragment Function NodeList Null Number Object RegExp String TextNode Undefined Window".split(" "), a = n.length; a--;) {
				var o = n[a],
					u = window[o];
				if(u) try {
					t[e.call(new u)] = o.toLowerCase()
				} catch(c) {}
			}
			return function(n) {
				return null == n && (void 0 === n ? _undef : "null") || n.nodeType && r[n.nodeType] || "number" == typeof n.length && (n.callee && _arguments || n.alert && "window" || n.item && "nodelist") || t[e.call(n)]
			}
		}(),
		isFunc = function(e) {
			return "function" == getType(e)
		},
		weaveOne = function(source, method, advice) {
			var old = source[method];
			if(advice.type != _intro && !isFunc(old)) {
				var oldObject = old;
				old = function() {
					for(var code = arguments.length > 0 ? _arguments + "[0]" : "", i = 1; i < arguments.length; i++) code += "," + _arguments + "[" + i + "]";
					return eval("oldObject(" + code + ");")
				}
			}
			var aspect;
			return advice.type == _after || advice.type == _afterThrow || advice.type == _afterFinally ? aspect = function() {
				var e, t = null;
				try {
					e = old.apply(this, arguments)
				} catch(r) {
					t = r
				}
				if(advice.type == _after) {
					if(null != t) throw t;
					e = advice.value.apply(this, [e, method])
				} else advice.type == _afterThrow && null != t ? e = advice.value.apply(this, [t, method]) : advice.type == _afterFinally && (e = advice.value.apply(this, [e, t, method]));
				return e
			} : advice.type == _before ? aspect = function() {
				return advice.value.apply(this, [arguments, method]), old.apply(this, arguments)
			} : advice.type == _intro ? aspect = function() {
				return advice.value.apply(this, arguments)
			} : advice.type == _around && (aspect = function() {
				var e = {
					object: this,
					args: Array.prototype.slice.call(arguments)
				};
				return advice.value.apply(e.object, [{
					arguments: e.args,
					method: method,
					proceed: function() {
						return old.apply(e.object, e.args)
					}
				}])
			}), aspect.unweave = function() {
				source[method] = old, pointcut = source = aspect = old = null
			}, source[method] = aspect, aspect
		},
		search = function(e, t, r) {
			var n = [];
			for(var a in e) {
				var o = null;
				try {
					o = e[a]
				} catch(u) {}
				null != o && a.match(t.method) && isFunc(o) && (n[n.length] = {
					source: e,
					method: a,
					advice: r
				})
			}
			return n
		},
		weave = function(e, t) {
			var r = typeof e.target.prototype != _undef ? e.target.prototype : e.target,
				n = [];
			if(t.type != _intro && typeof r[e.method] == _undef) {
				var a = search(e.target, e, t);
				0 == a.length && (a = search(r, e, t));
				for(var o in a) n[n.length] = weaveOne(a[o].source, a[o].method, a[o].advice)
			} else n[0] = weaveOne(r, e.method, t);
			return _regexEnabled ? n : n[0]
		};
	jQuery.aop = {
		after: function(e, t) {
			return weave(e, {
				type: _after,
				value: t
			})
		},
		afterThrow: function(e, t) {
			return weave(e, {
				type: _afterThrow,
				value: t
			})
		},
		afterFinally: function(e, t) {
			return weave(e, {
				type: _afterFinally,
				value: t
			})
		},
		before: function(e, t) {
			return weave(e, {
				type: _before,
				value: t
			})
		},
		around: function(e, t) {
			return weave(e, {
				type: _around,
				value: t
			})
		},
		introduction: function(e, t) {
			return weave(e, {
				type: _intro,
				value: t
			})
		},
		setup: function(e) {
			_regexEnabled = e.regexMatch
		}
	}
}();
! function(e) {
	e.baidu = e.baidu || {}, baidu.template = function(t, a) {
		var r = function() {
				if(!e.document) return n._compile(t);
				var a = document.getElementById(t);
				if(a) {
					if(n.cache[t]) return n.cache[t];
					var r = /^(textarea|input)$/i.test(a.nodeName) ? a.value : a.innerHTML;
					return n._compile(r)
				}
				return n._compile(t)
			}(),
			p = n._isObject(a) ? r(a) : r;
		return r = null, p
	};
	var n = baidu.template;
	n.versions = n.versions || [], n.versions.push("1.0.6"), n.cache = {}, n.LEFT_DELIMITER = n.LEFT_DELIMITER || "<%", n.RIGHT_DELIMITER = n.RIGHT_DELIMITER || "%>", n.ESCAPE = !0, n._encodeHTML = function(e) {
		return String(e).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\\/g, "&#92;").replace(/"/g, "&quot;").replace(/'/g, "&#39;")
	}, n._encodeReg = function(e) {
		return String(e).replace(/([.*+?^=!:${}()|[\]/\\])/g, "\\$1")
	}, n._encodeEventHTML = function(e) {
		return String(e).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;").replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\n/g, "\n").replace(/\\r/g, "\r")
	}, n._compile = function(e) {
		var t = "var _template_fun_array=[];\nvar fn=(function(data){\nvar _template_varName='';\nfor(name in data){\n_template_varName+=('var '+name+'=data[\"'+name+'\"];');\n};\neval(_template_varName);\n_template_fun_array.push('" + n._analysisStr(e) + "');\n_template_varName=null;\n})(_template_object);\nfn = null;\nreturn _template_fun_array.join('');\n";
		return new Function("_template_object", t)
	}, n._isObject = function(e) {
		return "function" == typeof e || !(!e || "object" != typeof e)
	}, n._analysisStr = function(e) {
		var t = n.LEFT_DELIMITER,
			a = n.RIGHT_DELIMITER,
			r = n._encodeReg(t),
			p = n._encodeReg(a);
		return e = String(e).replace(new RegExp("(" + r + "[^" + p + "]*)//.*\n", "g"), "$1").replace(new RegExp("<!--.*?-->", "g"), "").replace(new RegExp(r + "\\*.*?\\*" + p, "g"), "").replace(new RegExp("[\\r\\t\\n]", "g"), "").replace(new RegExp(r + "(?:(?!" + p + ")[\\s\\S])*" + p + "|((?:(?!" + r + ")[\\s\\S])+)", "g"), function(e, n) {
			var t = "";
			if(n)
				for(t = n.replace(/\\/g, "&#92;").replace(/'/g, "&#39;");
					/<[^<]*?&#39;[^<]*?>/g.test(t);) t = t.replace(/(<[^<]*?)&#39;([^<]*?>)/g, "$1\r$2");
			else t = e;
			return t
		}), e = e.replace(new RegExp("(" + r + "[\\s]*?var[\\s]*?.*?[\\s]*?[^;])[\\s]*?" + p, "g"), "$1;" + a).replace(new RegExp("(" + r + ":?[hvu]?[\\s]*?=[\\s]*?[^;|" + p + "]*?);[\\s]*?" + p, "g"), "$1" + a).split(t).join("	"), e = n.ESCAPE ? e.replace(new RegExp("\\t=(.*?)" + p, "g"), "',typeof($1) === 'undefined'?'':baidu.template._encodeHTML($1),'") : e.replace(new RegExp("\\t=(.*?)" + p, "g"), "',typeof($1) === 'undefined'?'':$1,'"), e = e.replace(new RegExp("\\t:h=(.*?)" + p, "g"), "',typeof($1) === 'undefined'?'':baidu.template._encodeHTML($1),'").replace(new RegExp("\\t(?::=|-)(.*?)" + p, "g"), "',typeof($1)==='undefined'?'':$1,'").replace(new RegExp("\\t:u=(.*?)" + p, "g"), "',typeof($1)==='undefined'?'':encodeURIComponent($1),'").replace(new RegExp("\\t:v=(.*?)" + p, "g"), "',typeof($1)==='undefined'?'':baidu.template._encodeEventHTML($1),'").split("	").join("');").split(a).join("_template_fun_array.push('").split("\r").join("\\'")
	}
}(window);
! function(e) {
	function t(t, l) {
		return parseInt(e.css(t[0], l)) || 0
	}

	function l(e) {
		return e[0].offsetWidth + t(e, "marginLeft") + t(e, "marginRight")
	}

	function r(e) {
		return e[0].offsetHeight + t(e, "marginTop") + t(e, "marginBottom")
	}
	e.fn.jCarouselLite = function(t) {
		return t = e.extend({
			btnPrev: null,
			btnNext: null,
			btnGo: null,
			mouseWheel: !1,
			auto: null,
			speed: 200,
			easing: null,
			vertical: !1,
			circular: !0,
			visible: 3,
			start: 0,
			scroll: 1,
			hoverScroll: !1,
			beforeStart: null,
			afterEnd: null,
			lazyLoadImg: !1
		}, t || {}), this.each(function() {
			function i() {
				o(x - t.scroll), x - t.scroll >= 0 && (z = setTimeout(arguments.callee, t.hoverScroll + t.speed))
			}

			function n() {
				o(x + t.scroll), x + t.scroll <= g - b && (C = setTimeout(arguments.callee, t.hoverScroll + t.speed))
			}

			function s() {
				return p.slice(x).slice(0, b)
			}

			function c() {
				v.find("div[data-src]").each(function() {
					var t = e(this).tbattr("data-title") ? e(this).tbattr("data-title") : "";
					e(this).replaceWith('<img src="' + e(this).tbattr("data-src") + '" alt="' + t + '" title="' + t + '" />')
				})
			}

			function o(l) {
				return a || (t.beforeStart && t.beforeStart.call(this, s()), t.lazyLoadImg && c(), t.circular ? l <= t.start - b - 1 ? (v.css(u, -((g - 2 * b) * T) + "px"), x = l == t.start - b - 1 ? g - 2 * b - 1 : g - 2 * b - t.scroll) : l >= g - b + 1 ? (v.css(u, -(b * T) + "px"), x = l == g - b + 1 ? b + 1 : b + t.scroll) : x = l : x = Math.min(Math.max(0, l), g - b), a = !0, v.animate("left" == u ? {
					left: -(x * T)
				} : {
					top: -(x * T)
				}, t.speed, t.easing, function() {
					t.afterEnd && t.afterEnd.call(this, s()), a = !1
				}), t.circular || (e(t.btnPrev).removeClass("prev_disabled"), e(t.btnNext).removeClass("next_disabled"), e(x - t.scroll < 0 && t.btnPrev || []).addClass("prev_disabled"), e(x + t.scroll > g - b && t.btnNext || []).addClass("next_disabled"))), !1
			}
			var a = !1,
				u = t.vertical ? "top" : "left",
				f = t.vertical ? "height" : "width",
				d = e(this),
				v = e("ul", d),
				h = e("li", v),
				m = h.size(),
				b = t.visible;
			t.circular && (v.prepend(h.slice(m - b - 1 + 1).clone()).append(h.slice(0, b).clone()), t.start += b);
			var p = e("li", v),
				g = p.size(),
				x = t.start;
			d.css("visibility", "visible"), p.css({
				overflow: "hidden",
				"float": t.vertical ? "none" : "left"
			}), v.css({
				margin: "0",
				padding: "0",
				position: "relative",
				"list-style-type": "none",
				"z-index": "1"
			}), d.css({
				overflow: "hidden",
				position: "relative",
				"z-index": "2",
				left: "0px"
			});
			var T = t.vertical ? r(p) : l(p),
				S = T * g,
				w = T * b;
			if(p.css({
					width: p.width(),
					height: p.height()
				}), v.css(f, S + "px").css(u, -(x * T)), d.css(f, w + "px"), t.btnPrev) {
				var y = e(t.btnPrev);
				if(t.hoverScroll) {
					var z;
					y.hover(function() {
						z = setTimeout(i, 500)
					}, function() {
						clearTimeout(z)
					}).click(function() {
						return clearTimeout(z), z = setTimeout(i, t.hoverScroll + t.speed), o(x - t.scroll)
					})
				} else y.click(function() {
					return o(x - t.scroll)
				})
			}
			if(t.btnNext) {
				var k = e(t.btnNext);
				if(t.hoverScroll) {
					var C;
					k.hover(function() {
						C = setTimeout(n, 500)
					}, function() {
						clearTimeout(C)
					}).click(function() {
						return clearTimeout(C), C = setTimeout(n, t.hoverScroll + t.speed), o(x + t.scroll)
					})
				} else k.click(function() {
					return o(x + t.scroll)
				})
			}
			t.btnGo && e.each(t.btnGo, function(l, r) {
				e(r).click(function() {
					return o(t.circular ? t.visible + l : l)
				})
			}), t.mouseWheel && d.mousewheel && d.mousewheel(function(e, l) {
				return l > 0 ? o(x - t.scroll) : o(x + t.scroll)
			}), t.auto && setInterval(function() {
				o(x + t.scroll)
			}, t.auto + t.speed)
		})
	}
}(jQuery);
var PageLink = {
	_debug: -1,
	init: function(e, t, n, a, o) {
		var i = this,
			d = a || document.body;
		if($(d).mousedown(function(n) {
				"A" === n.target.nodeName && i._onclick(n, e, t, o)
			}), $(d).click(function(n) {
				"A" !== n.target.nodeName && i._onclick(n, e, t, o)
			}), n && n.length)
			for(var m = 0; m < n.length; m++) i.bindCustomElem(n[m]);
		window.location.href.indexOf("page_link_debug=true") > 0 && (i._debug = 0, $(d).mouseover(function(n) {
			"A" === n.target.nodeName && i._onclick(n, e, t, o)
		}))
	},
	bindCustomElem: function(e) {
		$(e).attr("page_link_custom_elem_flag", "true")
	},
	_onclick: function(e, t, n, a) {
		var o = this,
			i = e.target;
		if(!i || "BODY" != i.nodeName) {
			var d = "";
			if((!a || !i || (d = a(i), "exit" != d)) && o._is_need_send_msg(i)) {
				for(var m = "fr=" + t + "&st_type=page_link&st_mod=" + n, _ = $.trim(i.className), r = i.id, s = i.nodeName, c = $.trim(i.className), l = 0; i && i.parentNode && i != document.body && i.parentNode != document.body;) i = i.parentNode, s = i.nodeName + s, i.className && 4 > l && (l++, c = c ? $.trim(i.className) + "-" + c : $.trim(i.className));
				m += "&st_value=" + s;
				var g = $(e.target).prevAll().length;
				m += g > 0 ? "&dom_i=" + g : "&dom_i=0", _ && (m += "&class_name=" + _), r && (m += "&id_name=" + r), c && (m += "&class_path=" + c), m = m.replace(/\ /g, "-"), "" != d && (m += "&" + d), o._debug > -1 && (o._debug++, $(document.body).append("<div>[" + o._debug + "] " + m + "<div>"), $(e.target).attr("title", "[" + o._debug + "] " + m), console && console.log("[" + o._debug + "] " + m));
				var u = new Image;
				window["bd_pv_" + (new Date).getTime()] = u, u.src = "https://gsp0.baidu.com/5aAHeD3nKhI2p27j8IqW0jdnxx1xbK/tb/img/pv.gif?" + m + "&t=" + (new Date).getTime(), u = null
			}
		}
	},
	_is_need_send_msg: function(e) {
		var t = e.nodeName,
			n = $(e).attr("type");
		return "A" == t || "INPUT" == t && ("submit" == n || "button" == n) || "BUTTON" == t ? !0 : $(e).attr("page_link_custom_elem_flag") ? !0 : !1
	}
};
window.PageUnit = window.PageUnit || {
	load: function(t, a) {
		var n = "";
		return "object" == typeof PageUnitData && null != PageUnitData[t] && (n = PageUnitData[t], null != a && 0 == n.indexOf("<") && (n = $(n).attr(a).get(0).outerHTML)), n
	}
};
! function(e) {
	e.tb = e.tb || {}, e.console = function() {
		var e = function() {};
		return {
			log: e,
			debug: e,
			error: e,
			info: e,
			warn: e
		}
	}(), e.log = function() {}, e.tb.ajax = function(t) {
		var n = jQuery.extend({}, {
				cache: !1
			}, t),
			i = t && t.context || n;
		if("jsonp" === n.dataType || "json" === n.dataType) return e.ajax(t), void 0;
		var r = /^(\w+:)?\/\/([^\/?#]+)/.exec(n.url),
			o = r && (r[1] && r[1] !== location.protocol || r[2] !== location.host);
		if(o) return e.log("Sorry, but cross domain request is not allowed, maybe you need to check you url replacment! ^-^<br/>the remote url is: " + r[1] + "//" + r[2]), void 0;
		var a = n.success || e.noop;
		n.success = function(t) {
			var n = "string" == typeof t ? e.parseJSON(t) : t;
			if(!n || void 0 === n.no || void 0 === n.data || void 0 === n.error) return a.call(i, {
				no: -1,
				data: t,
				msg: "not json data format"
			}), void 0;
			var r = {
				4: "\u7528\u6237\u672a\u767b\u5f55!",
				5: "\u63d0\u4ea4\u53c2\u6570\u6821\u9a8c\u5931\u8d25\uff01",
				6: "\u5bf9\u4e0d\u8d77\uff0c\u60a8\u65e0\u6743\u9650\u8fdb\u884c\u6b64\u64cd\u4f5c!",
				7: "\u8bf7\u4f7f\u7528post\u65b9\u5f0f\u63d0\u4ea4\u6570\u636e!",
				8: "\u60a8\u7684ID\u88ab\u5c01\u7981!",
				10: "\u60a8\u8bf4\u7684\u592a\u5feb\u4e86\uff0c\u8bf7\u505c\u4e0b\u6765\u5148\u559d\u676f\u8336\u5427!",
				9000: "\u9700\u8981\u8bbe\u7f6e\u7528\u6237\u540d\u3002"
			};
			r[n.no] ? 4 == n.no ? TbUtil.login ? TbUtil.login() : e.log("TbUtil.login function is not exists", "warning") : 9e3 === n.no ? TbCom.process("User", "buildUnameFrame") : e.dialog.open('<div style="font-size:12px;color:red;text-align:center;padding:10px;">' + r[n.no] + "</div>", {
				title: "\u9519\u8bef\u63d0\u793a",
				width: 310
			}) : a.call(i, n)
		}, e.ajax(n)
	}, e.tb.get = function(t, n, i, r) {
		return jQuery.isFunction(n) && (r = r || i, i = n, n = null), e.tb.ajax({
			type: "GET",
			url: t,
			data: n,
			success: i,
			dataType: r
		})
	}, e.tb.post = function(t, n, i, r) {
		jQuery.isFunction(n) && (r = r || i, i = n, n = {});
		var o = "utf-8";
		return "string" == typeof n ? n.indexOf("ie") < 0 && (n += "&ie=" + o) : e.isPlainObject(n) ? n = e.extend({
			ie: o
		}, n) : e.isArray(n) && n.push({
			name: "ie",
			value: o
		}), e.tb.ajax({
			type: "POST",
			url: t,
			data: n,
			success: i,
			dataType: r
		})
	}
}(jQuery),
function(e) {
	function t(t) {
		var n = t || window.event,
			i = [].slice.call(arguments, 1),
			r = 0,
			o = 0,
			a = 0;
		return t = e.event.fix(n), t.type = "mousewheel", n.wheelDelta && (r = n.wheelDelta / 120), n.detail && (r = -n.detail / 3), a = r, void 0 !== n.axis && n.axis === n.HORIZONTAL_AXIS && (a = 0, o = -1 * r), void 0 !== n.wheelDeltaY && (a = n.wheelDeltaY / 120), void 0 !== n.wheelDeltaX && (o = -1 * n.wheelDeltaX / 120), i.unshift(t, r, o, a), (e.event.dispatch || e.event.handle).apply(this, i)
	}
	var n = ["DOMMouseScroll", "mousewheel"];
	if(e.event.fixHooks)
		for(var i = n.length; i;) e.event.fixHooks[n[--i]] = e.event.mouseHooks;
	e.event.special.mousewheel = {
		setup: function() {
			if(this.addEventListener)
				for(var e = n.length; e;) this.addEventListener(n[--e], t, !1);
			else this.onmousewheel = t
		},
		teardown: function() {
			if(this.removeEventListener)
				for(var e = n.length; e;) this.removeEventListener(n[--e], t, !1);
			else this.onmousewheel = null
		}
	}, e.fn.extend({
		mousewheel: function(e) {
			return e ? this.bind("mousewheel", e) : this.trigger("mousewheel")
		},
		unmousewheel: function(e) {
			return this.unbind("mousewheel", e)
		}
	})
}(jQuery),
function(e) {
	var t = function(t) {
		var n = this;
		this.cfg = e.extend({}, {
			className: "dialogJmodal",
			resizeable: !0
		}, t), this.element = e('<div class="' + this.cfg.className + '"/>').appendTo(document.body).css({
			display: "none",
			zIndex: e.getzIndex(),
			width: this.width(),
			height: this.height()
		}), this.cfg.show && this.show(), this.resizeFunc = function() {
			n.css("width", n.width()), n.css("height", n.height()), n.triggerHandler("resize")
		}, this.cfg.resizeable && e(window).bind("resize", this.resizeFunc)
	};
	t.prototype = {
		constructor: t,
		show: function() {
			this.element.show.apply(this.element, arguments), this._processTages(1)
		},
		hide: function() {
			this.element.hide.apply(this.element, arguments), this._processTages(0)
		},
		width: function() {
			return e(window).width()
		},
		height: function() {
			return Math.max(e("body").height(), e("html").height())
		},
		css: function() {
			this.element.css.apply(this.element, arguments)
		},
		triggerHandler: function() {
			this.element.triggerHandler.apply(this.element, arguments)
		},
		bind: function() {
			this.element.bind.apply(this.element, arguments)
		},
		remove: function() {
			this._processTages(0), this.element && this.element.remove(), e(window).unbind("resize", this.resizeFunc);
			for(var t in this) delete this[t]
		},
		_processTages: function(t) {
			var n = this;
			if(e.browser.msie)
				if(n.special = n.special || [], t) {
					if(n.special.length > 0) return;
					var i = e("SELECT,OBJECT,EMBED");
					this.cfg.safety && (i = i.filter(function() {
						return 0 == n.cfg.safety.find(this).length
					})), i.each(function() {
						var t = e(this);
						n.special.push({
							dom: this,
							css: t.css("visibility")
						}), t.css("visibility", "hidden")
					})
				} else
					for(var r = 0, o = n.special.length; o > r; r++) e(n.special[r].dom).css("visibility", n.special[r].css || ""), n.special[r].dom = null
		}
	}, e.modal = t, e.getzIndex = function() {
		return e.zIndex = e.zIndex || 5e4, e.zIndex++
	}
}(jQuery),
function(e) {
	e.getcurzIndex = function() {
		return e.curzIndex = e.curzIndex || 10005, e.curzIndex++
	}
}(jQuery),
function(e) {
	var t = e.browser.msie && e.browser.version < 7,
		n = function(r) {
			function o() {
				s.dragged || (s.element.triggerHandler("onresize"), s.sizeTimer && clearTimeout(s.sizeTimer), s.sizeTimer = setTimeout(function() {
					s.setPosition()
				}, 5))
			}
			n.INST.push(this), this.cfg = e.extend({}, n.setting, r), this.cfg.showTitle || (this.cfg.draggable = !1), (null != this.cfg.top || null != this.cfg.left) && (this.cfg.autoCenter = !1);
			var a = "dialogJ";
			this.cfg.holderClassName && (a += " " + this.cfg.holderClassName), !t && this.cfg.fixed && (a += " dialogJfix"), this.cfg.showShadow && (a += " dialogJshadow");
			var s = this;
			if(this.cfg.modal) {
				var l = {};
				this.cfg.modalClassName && (l.className = this.cfg.modalClassName), this.modal = new e.modal(l)
			}
			this.element = e('<div class="' + a + '"></div>').css({
				zIndex: e.getzIndex(),
				display: "none"
			}).appendTo(document.body), this.elementWrapper = e('<div class="uiDialogWrapper"></div>').appendTo(this.element), this._setupTitleBar(), this.setTitle(this.cfg.title), this._setupNoTitle(), "iframe" === this.cfg.contentType && (this.cfg.html = e("<iframe></iframe>").css({
				width: "100%",
				height: "100%",
				border: "none"
			}).attr({
				src: this.cfg.html,
				frameBorder: 0
			})), this._setupContent(), this.setContent(this.cfg.html), this.width(this.cfg.width), this.height(this.cfg.height), this.setPosition(this.cfg.left, this.cfg.top), this.cfg.show && this.show(), this.cfg.autoCenter && e(window).bind("resize", o), this._setScroll(), e.each(i, function(e, t) {
				s.cfg[t] && s.bind(t, s.cfg[t])
			}), this.cfg.escable && this._setupEscKey(), this.close = function() {
				if(s.element.triggerHandler("onclose") === !1) return !1;
				e(window).unbind("resize", o), s.modal && s.modal.remove(), s._setScroll(!0), s.element.remove();
				for(var t = 0, i = n.INST.length; i > t; t++)
					if(n.INST[t] == s) {
						n.INST.splice(t, 1);
						break
					}
			}
		},
		i = ["onaccept", "oncancel", "onclose", "onresize", "onhide"];
	e.extend(n, {
		open: function(t, i) {
			return new n(e.extend({}, i, {
				html: t
			}))
		},
		ask: function(t, i, r, o) {
			var a = new n(e.extend({
				modal: !0
			}, o || {}, {
				html: t || "",
				show: !1
			}));
			if(e.isArray(i) && i.length > 0) {
				var s = e('<div class="dialogJanswers"></div>').appendTo(a.elementWrapper).html(e.map(i, function(e) {
					return '<input type="button" class="btn-sub btn-small dialogJbtn" value="' + e + '" />'
				}).join(" "));
				a.buttons = e("input[type=button]", s).each(function(t) {
					e(this).bind("click", function() {
						r.call(this, t, a) !== !1 && a.close()
					})
				})
			}
			return a.setPosition(), o && o.show || a.show(), a
		},
		alert: function(t, r) {
			var o = e.extend({}, r || {});
			return n.ask(t, [o.acceptValue || "\u786e\u5b9a"], function(e, t) {
				return t.element.triggerHandler(i[e], this)
			}, o)
		},
		confirm: function(t, r) {
			var o = e.extend({}, r || {});
			return n.ask(t, [o.acceptValue || "\u786e\u5b9a", o.cancelValue || "\u53d6\u6d88"], function(e, t) {
				return t.element.triggerHandler(i[e], this)
			}, o)
		},
		assert: function(t, r, o) {
			var a = e.extend({
				button: !0
			}, o || {});
			2 == arguments.length && (a = r, r = e.noop);
			var s = n.ask(t, a.button ? [a.acceptValue || "\u786e\u5b9a"] : [], function(e, t) {
				return t.element.triggerHandler(i[e], this)
			}, a);
			return setTimeout(function() {
				s && s.close && s.close(), r && r()
			}, parseInt(a.time) || 2e3), s
		},
		load: function(t, i) {
			i = i || {};
			var r = {
				url: t,
				type: "GET",
				dataType: "html",
				cache: !1,
				success: function(t) {
					i.filter && (t = e(i.filter, t)), o.setContent(t)
				}
			};
			e.each(["type", "cache"], function() {
				this in i && (r[this] = i[this], delete i[this])
			}), e.ajax(r);
			var o = new n(i || {});
			return o
		},
		close: function() {
			for(var e = 0; e < this.INST.length; e++) {
				var t = this.INST[e].close();
				t !== !1 && e--
			}
		},
		setting: {
			modal: !0,
			showShadow: !0,
			showTitle: !0,
			noTitle: !1,
			width: 300,
			height: null,
			fixed: !0,
			left: null,
			top: null,
			show: !0,
			closeable: !0,
			hideOnclose: !1,
			draggable: !0,
			contentType: null,
			resizeable: !1,
			closeTips: null,
			escable: !0,
			scrollable: !0,
			modalClassName: null,
			autoCenter: !0,
			html: null,
			minWidth: 200,
			minHeight: 100,
			maxWidth: null,
			maxHeight: null
		}
	}), n.prototype = {
		constructor: n,
		setTitle: function(e) {
			this.element.find(".dialogJtitle>span.dialogJtxt").html(e || "")
		},
		setContent: function(e) {
			e && this.element.find(".dialogJbody").html(e)
		},
		width: function(e) {
			return this.element.css("width", e)
		},
		height: function(t) {
			return e(".dialogJbody", this.element).css("height", t)
		},
		setPosition: function(n, i) {
			if(0 !== n & !n && 0 !== i && !i) {
				var r = e(document),
					o = e(window),
					a = this.cfg.fixed && !t ? [0, 0] : [r.scrollLeft(), r.scrollTop()];
				n = a[0] + (o.width() - this.element.outerWidth()) / 2, i = a[1] + (o.height() - this.element.outerHeight()) / 2, i = i >= 0 ? i : 0
			}
			this.element.css({
				left: n,
				top: i
			}), this.triggerHandler("resize")
		},
		getTitle: function() {
			return this.element.find(".dialogJtitle>span").html()
		},
		getContent: function() {
			return e(".dialogJbody", this.element).html()
		},
		show: function() {
			this.element.show.apply(this.element, arguments), this.modal && (this.modal.cfg.safety = this.element, this.modal.show.apply(this.modal, arguments))
		},
		hide: function() {
			return this.element.triggerHandler("onhide") === !1 ? !1 : (this.element.hide.apply(this.element, arguments), this.modal && this.modal.hide.apply(this.modal, arguments), void 0)
		},
		getElement: function() {
			return this.element[0]
		},
		bind: function() {
			return this.element.bind.apply(this.element, arguments), this
		},
		triggerHandler: function() {
			this.element.triggerHandler.apply(this.element, arguments)
		},
		getButtons: function() {
			return this.buttons
		},
		_setupNoTitle: function() {
			if(this.cfg.noTitle) {
				var t = e(".dialogJtitle");
				t.css({
					"border-bottom": 0,
					"background-color": "#fff"
				})
			}
		},
		_setupTitleBar: function() {
			if(this.cfg.showTitle) {
				var t = this,
					n = t.titleBar = e('<div class="dialogJtitle"><span class="dialogJtxt"></span></div>').appendTo(this.elementWrapper);
				if(this.cfg.closeable && e('<a href="#" class="dialogJclose" title="' + (this.cfg.closeTips || "\u5173\u95ed\u672c\u7a97\u53e3") + '">&nbsp;</a>').appendTo(n).bind("mousedown", function(e) {
						e.stopPropagation()
					}).click(function() {
						return t.cfg.hideOnclose ? t.hide() : t.close(), !1
					}), this.cfg.draggable) {
					n[0].style.cssText = "-moz-user-select: none;cursor:move";
					e(t.element).draggable({
						handle: e(n),
						start: function() {
							t._setupHackDiv(1)
						},
						stop: function() {
							t.dragged = !0, t._setupHackDiv(0)
						}
					})
				}
			}
		},
		_setupHackDiv: function(t) {
			var n = this;
			if(t) {
				if(e("IFRAME", n.element).length > 0) {
					var i = e(".dialogJcontent", n.element);
					n.hack_div = (n.hack_div || e("<div></div>").appendTo(i).css({
						position: "absolute",
						left: 0,
						top: 0,
						cursor: "move"
					})).css({
						display: "block",
						width: n.element.outerWidth(),
						height: n.element.outerHeight()
					})
				}
			} else n.hack_div && n.hack_div.css("display", "none")
		},
		_setupEscKey: function() {
			var t = this,
				n = function(n) {
					27 == n.which && (t.showTitle ? e(".dialogJclose", t.titleBar).triggerHandler("click") : t.close())
				};
			e(document).bind("keydown", n), e(t.element).bind("onclose", function() {
				e(document).unbind("keydown", n)
			})
		},
		_setupContent: function() {
			var t = e('<div class="dialogJcontent"><div class="dialogJbody"id="dialogJbody"></div></div>');
			this.elementWrapper.append(t)
		},
		_setScroll: function(t) {
			if(this.cfg.modal && !this.cfg.scrollable) {
				var n = e("html");
				if(n.length) {
					var i = n[0].scrollTop;
					t ? n.css({
						overflow: this.element.data("htmlof") || "",
						"padding-right": "0px"
					}) : (n[0].style.overFlow && this.element.data("htmlof", n[0].style.overFlow), n.css({
						overflow: "hidden",
						"padding-right": "17px"
					})), n[0].scrollTop = i
				}
			}
		}
	}, e.each(i, function(e, t) {
		n.prototype[t] = function(e) {
			this.bind(t, e)
		}
	}), n.INST = [], e.dialog = n
}(jQuery), $.disableInput = function(e, t, n) {
		var i, r, o, a = [8, 9, 16, 17, 18, 20, 13, 27, 37, 38, 39, 40, 33, 34, 35, 36, 45, 46, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 144, 145],
			s = function() {
				i = e, t && "function" == typeof t && (r = t || null), n && "function" == typeof n && (o = n || null), l()
			},
			l = function() {
				i.bind("keydown", function(e) {
					return c(e)
				})
			},
			c = function(e) {
				var t = e;
				return $.inArray(t.keyCode, a) >= 0 ? !0 : t.ctrlKey || t.altKey ? !0 : o && !o(t.keyCode) ? (t.preventDefault(), !1) : r && !r(i.val().toString().trim()) ? (t.preventDefault(), !1) : void 0
			};
		s()
	}, $.subInput = function(e, t) {
		$.disableInput(e, function(e) {
			return e.toString().getByteLength() >= t ? !1 : !0
		});
		var n = function() {
			var n = e.val().toString();
			n.getByteLength() > t && e.val(n.subByte(t, ""))
		};
		e.bind("propertychange", n);
		try {
			e.bind("input", n)
		} catch(i) {}
		e.bind("keyup", n)
	},
	function(e, t, n) {
		e.json = e.json || {}, e.json.encode = function() {
			function t(e) {
				return /["\\\x00-\x1f]/.test(e) && (e = e.replace(/["\\\x00-\x1f]/g, function(e) {
					var t = o[e];
					return t ? t : (t = e.charCodeAt(), "\\u00" + Math.floor(t / 16).toString(16) + (t % 16).toString(16))
				})), '"' + e + '"'
			}

			function n(t) {
				var n, i, r, o = ["["],
					a = t.length;
				for(i = 0; a > i; i++) switch(r = t[i], typeof r) {
					case "undefined":
					case "function":
					case "unknown":
						break;
					default:
						n && o.push(","), o.push(e.json.encode(r)), n = 1
				}
				return o.push("]"), o.join("")
			}

			function i(e) {
				return 10 > e ? "0" + e : e
			}

			function r(e) {
				return '"' + e.getFullYear() + "-" + i(e.getMonth() + 1) + "-" + i(e.getDate()) + "T" + i(e.getHours()) + ":" + i(e.getMinutes()) + ":" + i(e.getSeconds()) + '"'
			}
			var o = {
				"\b": "\\b",
				"	": "\\t",
				"\n": "\\n",
				"\f": "\\f",
				"\r": "\\r",
				'"': '\\"',
				"\\": "\\\\"
			};
			return function(i) {
				switch(typeof i) {
					case "undefined":
						return "undefined";
					case "number":
						return isFinite(i) ? String(i) : "null";
					case "string":
						return t(i);
					case "boolean":
						return String(i);
					default:
						if(null === i) return "null";
						if(i instanceof Array) return n(i);
						if(i instanceof Date) return r(i);
						var o, a, s = ["{"],
							l = e.json.encode;
						for(key in i)
							if(i.hasOwnProperty(key)) switch(a = i[key], typeof a) {
								case "undefined":
								case "unknown":
								case "function":
									break;
								default:
									o && s.push(","), o = 1, s.push(l(key) + ":" + l(a))
							}
						return s.push("}"), s.join("")
				}
			}
		}(), e.json.parseJSON = function() {
			var e, t, i, r, o = {
					'"': '"',
					"\\": "\\",
					"/": "/",
					b: "\b",
					f: "\f",
					n: "\n",
					r: "\r",
					t: "	"
				},
				a = function(t) {
					throw {
						name: "SyntaxError",
						message: t,
						at: e,
						text: i
					}
				},
				s = function(n) {
					return n && n !== t && a("Expected '" + n + "' instead of '" + t + "'"), t = i.charAt(e), e += 1, t
				},
				l = function() {
					var e, n = "";
					for("-" === t && (n = "-", s("-")); t >= "0" && "9" >= t;) n += t, s();
					if("." === t)
						for(n += "."; s() && t >= "0" && "9" >= t;) n += t;
					if("e" === t || "E" === t)
						for(n += t, s(), ("-" === t || "+" === t) && (n += t, s()); t >= "0" && "9" >= t;) n += t, s();
					return e = +n, isFinite(e) ? e : (a("Bad number"), void 0)
				},
				c = function() {
					var e, n, i, r, l = "";
					if('"' === t || "'" === t)
						for(r = t; s();) {
							if(t === r) return s(), l;
							if("\\" === t)
								if(s(), "u" === t) {
									for(i = 0, n = 0; 4 > n && (e = parseInt(s(), 16), isFinite(e)); n += 1) i = 16 * i + e;
									l += String.fromCharCode(i)
								} else {
									if("string" != typeof o[t]) break;
									l += o[t]
								}
							else l += t
						}
					a("Bad string")
				},
				u = function() {
					for(; t && " " >= t;) s()
				},
				g = function() {
					switch(t) {
						case "t":
							return s("t"), s("r"), s("u"), s("e"), !0;
						case "f":
							return s("f"), s("a"), s("l"), s("s"), s("e"), !1;
						case "n":
							return s("n"), s("u"), s("l"), s("l"), null
					}
					a("Unexpected '" + t + "'")
				},
				h = function() {
					var e = [];
					if("[" === t) {
						if(s("["), u(), "]" === t) return s("]"), e;
						for(; t;) {
							if(e.push(r()), u(), "]" === t) return s("]"), e;
							s(","), u()
						}
					}
					a("Bad array")
				},
				f = function() {
					if('"' === t || "'" === t) return c();
					for(var e = ""; t && !(":" === t || " " >= t);) e += t, s();
					return "" === e && a("Bad key"), e
				},
				p = function() {
					var e, n = {};
					if("{" === t) {
						if(s("{"), u(), "}" === t) return s("}"), n;
						for(; t;) {
							if(e = f(), u(), s(":"), Object.hasOwnProperty.call(n, e) && a('Duplicate key "' + e + '"'), n[e] = r(), u(), "}" === t) return s("}"), n;
							s(","), u()
						}
					}
					a("Bad object")
				};
			return r = function() {
					switch(u(), t) {
						case "{":
							return p();
						case "[":
							return h();
						case '"':
						case "'":
							return c();
						case "-":
							return l();
						default:
							return t >= "0" && "9" >= t ? l() : g()
					}
				},
				function(o, s) {
					var l;
					return i = o, e = 0, t = " ", l = r(), u(), t && a("Syntax error"), "function" == typeof s ? function c(e, t) {
						var i, r, o = e[t];
						if(o && "object" == typeof o)
							for(i in o) Object.prototype.hasOwnProperty.call(o, i) && (r = c(o, i), r !== n ? o[i] = r : delete o[i]);
						return s.call(e, t, o)
					}({
						"": l
					}, "") : l
				}
		}(), e.json.decode = function(t, n) {
			if("string" != typeof t || !t.length) return null;
			if(n && !/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/.test(t.replace(/\\./g, "@").replace(/"[^"\\\n\r]*"/g, ""))) return null;
			try {
				return e.json.parseJSON(t)
			} catch(i) {
				return {}
			}
		}
	}(jQuery, window), $.getBrowser = function() {
		var e = navigator.userAgent,
			t = "",
			n = "";
		return e.indexOf("AppleWebKit") >= 0 ? t = "webkit" : e.indexOf("Gecko") >= 0 ? t = "gecko" : e.indexOf("MSIE") >= 0 && (t = "ie"), e.indexOf("Firefox") >= 0 ? n = "firefox" : e.indexOf("360SE") >= 0 ? n = "360se" : e.indexOf("SE") >= 0 ? n = "sougou" : e.indexOf("Maxthon") >= 0 ? n = "maxthon" : e.indexOf("MSIE") >= 0 ? n = "ie" : e.indexOf("Chrome") >= 0 ? n = "chrome" : e.indexOf("Safari") >= 0 && (n = "safari"), {
			core: t,
			name: n
		}
	}, $.resizePic = function(e, t, n, i) {
		function r(e, t, n, i) {
			var r = 0,
				o = e,
				a = t;
			switch(e > n && (r += 1), t > i && (r += 2), r) {
				case 1:
					o = n, o = t * n / e;
				case 2:
					a = i, o = e * i / t;
				case 3:
					a = t / i > e / n ? i : t * n / e, o = t / i > e / n ? e * i / t : n
			}
			return 0 != r && (s = !0), [o, a]
		}
		var o = t || 120,
			a = n || 120,
			s = !1,
			l = e;
		if(0 == l.width()) {
			var c, u = this,
				g = arguments;
			return c = setTimeout(function() {
				clearTimeout(c), c = null, g.callee.apply(u, g)
			}, 100), !1
		}
		var h = r(l.width(), l.height(), o, a);
		return e.css("width", h[0]), e.css("height", h[1]), e.css("visibility", "visible"), 1 == i && e.css("margin-top", (n - parseInt(h[1])) / 2), s
	}, $.dateFormat = function(e, t) {
		function n(e, n) {
			t = t.replace(e, n)
		}
		if("string" != typeof t) return e.toString();
		var i = function(e) {
				return String(e).length > 1 ? String(e) : "0" + e
			},
			r = e.getFullYear(),
			o = e.getMonth() + 1,
			a = e.getDate(),
			s = e.getHours(),
			l = e.getMinutes(),
			c = e.getSeconds();
		return n(/yyyy/g, String(r)), n(/yy/g, i(r.toString().slice(2), 2)), n(/MM/g, i(o, 2)), n(/M/g, o), n(/dd/g, i(a, 2)), n(/d/g, a), n(/HH/g, i(s, 2)), n(/H/g, s), n(/hh/g, i(s % 12, 2)), n(/h/g, s % 12), n(/mm/g, i(l, 2)), n(/m/g, l), n(/ss/g, i(c, 2)), n(/s/g, c), t
	},
	function(e) {
		e.extend(String.prototype, {
			escapeHTML: function() {
				return this.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\s/g, "&nbsp;").replace(/"/g, "&quot;")
			},
			unescapeHTML: function() {
				return this.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&nbsp;/g, " ").replace(/&quot;/g, '"').replace(/&amp;/g, "&")
			},
			format: function() {
				var t = Array.prototype.slice.call(arguments, 0);
				return t.unshift(this), e.tb.format.apply(e.tb, t)
			},
			tempFormat: function() {
				var t = Array.prototype.slice.call(arguments, 0);
				return t.unshift(this), e.tb.format.apply(e.tb, t)
			},
			getByteLength: function() {
				return this.replace(/[^\x00-\xff]/g, "mm").length
			},
			subByte: function(t, n) {
				e.tb.subByte(this, t, n)
			},
			escapeUTF8: function() {
				return escape(this).replace(/%u(\w{4})/g, function(e, t) {
					return encodeURIComponent(String.fromCharCode("0x" + t)).replace(/%/g, "%25")
				})
			}
		})
	}(jQuery),
	function(e) {
		function t(t, n) {
			this.$el = e(t), this.config = e.extend({}, this.defaultConfig, n), this.init()
		}
		t.prototype = {
			defaultConfig: {
				enterDelay: 1e3,
				leaveDelay: 1e3,
				mouseenter: null,
				mouseleave: null
			},
			config: null,
			type: null,
			timer: null,
			entered: !1,
			init: function() {
				var e = this.$el,
					t = this;
				e.bind("mouseenter.delayhover", function(e) {
					var n = this;
					t.hoverMouseenter(e, n)
				}), e.bind("mouseleave.delayhover", function(e) {
					var n = this;
					t.hoverMouseleave(e, n)
				})
			},
			hoverMouseenter: function(e, t) {
				var n = this,
					i = this.config;
				clearTimeout(this.timer), this.timer = setTimeout(function() {
					"function" == typeof i.mouseenter && i.mouseenter.call(t, e), n.entered = !0
				}, i.enterDelay)
			},
			hoverMouseleave: function(e, t) {
				var n = this,
					i = this.config;
				clearTimeout(this.timer), this.entered && (this.timer = setTimeout(function() {
					"function" == typeof i.mouseleave && i.mouseleave.call(t, e), n.entered = !1
				}, i.leaveDelay))
			},
			clearHoverTimer: function() {
				clearTimeout(this.timer), this.entered = !1
			},
			destroy: function() {
				this.$el.unbind(".delayhover"), clearTimeout(this.timer), this.entered && "function" == typeof this.config.mouseleave && this.config.mouseleave.call(this)
			}
		}, e.fn.delayhover = function(e) {
			if(this.data("tb-delayhover")) throw new Error("$.delayhover: \u4e0d\u80fd\u7ed1\u5b9a\u4e24\u6b21");
			return this.data("tb-delayhover", new t(this, e)), this
		}, e.fn.removeDelayhover = function() {
			return this.data("tb-delayhover") && (this.data("tb-delayhover").destroy(), this.removeData("tb-delayhover")), this
		}, e.fn.clearDelayHoverTimer = function() {
			return this.data("tb-delayhover") && this.data("tb-delayhover").clearHoverTimer(), this
		}, e.tb.Delayhover = t
	}(jQuery),
	function($, undefined) {
		$.tb.escapeHTML = function(e) {
			return "string" != typeof e ? "" : e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/'/g, "&#039;").replace(/"/g, "&quot;")
		}, $.tb.unescapeHTML = function(e) {
			return "string" != typeof e ? "" : e.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&nbsp;/g, " ").replace(/&#039;/g, "'").replace(/&quot;/g, '"').replace(/&amp;/g, "&")
		}, $.tb.format = function(e, t) {
			if("undefined" == typeof t) return e;
			var n = /([.*+?^=!:${}()|[\]\/\\])/g,
				i = "{".replace(n, "\\$1"),
				r = "}".replace(n, "\\$1"),
				o = new RegExp("#" + i + "([^" + i + r + "]+)" + r, "g"),
				a = new RegExp("#" + i + "(\\d+)" + r, "g");
			if("object" == typeof t) return e.replace(o, function(e, n) {
				var i = t[n];
				return "function" == typeof i && (i = i(n)), "undefined" == typeof i ? "" : i
			});
			if("undefined" != typeof t) {
				var s = Array.prototype.slice.call(arguments, 1),
					l = s.length;
				return e.replace(a, function(e, t) {
					return t = parseInt(t, 10), t >= l ? e : s[t]
				})
			}
		}, $.tb.getByteLength = function(e) {
			return(e + "").replace(/[^\x00-\xff]/g, "mm").length
		}, $.tb.subByte = function(e, t, n) {
			if($.tb.getByteLength(e) <= t) return e;
			n = n === undefined ? "..." : String(n), t -= $.tb.getByteLength(n);
			for(var i = Math.floor(t / 2), r = $.tb.getByteLength(e); r > i; i++) {
				var o = e.substring(0, i),
					a = $.tb.getByteLength(o);
				if(a == t) return o + n;
				if(a > t) return e.substring(0, i - 1) + n
			}
			return e
		}, $.tb.escapeUTF8 = function(e) {
			return escape(e).replace(/%u(\w{4})/g, function(e, t) {
				return encodeURIComponent(String.fromCharCode("0x" + t)).replace(/%/g, "%25")
			})
		}, $.tb.resizePic = function(e, t, n, i, r) {
			var o = e.width,
				a = e.height,
				s = o,
				l = a;
			0 !== o && 0 !== a && ("string" == typeof i && (r = i, i = !1), "width" === r || "height" !== r && o / a >= t / n ? o > t && (s = t, l = Math.round(t * a / o)) : a > n && (l = n, s = Math.round(n * o / a)), i && (t > s && (e.style.marginLeft = Math.floor((t - s) / 2) + "px"), n > l && (e.style.marginTop = Math.floor((n - l) / 2) + "px")), e.width = s, e.height = l)
		}, $.tb.Storage = function() {
			function e(e) {
				return e.replace(/[_\s]/g, function(e) {
					return "_" == e ? "__" : "_s"
				})
			}

			function t() {
				return document.getElementById(a + "-storage")
			}

			function n(e) {
				return "[object Date]" === {}.toString.call(e) && "Invalid Date" !== e.toString() && !isNaN(e)
			}

			function i() {
				var e;
				return window.localStorage ? e = o() : window.ActiveXObject && (e = r()), e
			}

			function r() {
				var i = document.createElement("div");
				return i.style.display = "none", i.id = a + "-storage", document.body.appendChild(i), t().addBehavior("#default#userData"), {
					set: function(i, r, o) {
						var a = s.SUCCESS,
							l = t(),
							c = e(i),
							u = o ? o : (new Date).getTime() + 31536e6;
						n(u) && (u = u.getTime()), l.expires = new Date(u).toUTCString();
						try {
							l.setAttribute(c, r), l.save(c)
						} catch(g) {
							a = s.OVERFLOW
						}
						return l = null, a
					},
					get: function(n) {
						var i = t(),
							r = e(n),
							o = null;
						try {
							return i.load(r), o = i.getAttribute(r)
						} catch(a) {
							throw a.message
						}
					},
					del: function(n) {
						var i, r = t(),
							o = e(n);
						try {
							return r.load(o), i = r.getAttribute(o), i ? (r.removeAttribute(o), r.expires = new Date(315532799e3).toUTCString(), r.save(o), !0) : !1
						} catch(a) {
							return !1
						}
					}
				}
			}

			function o() {
				return {
					set: function(t, i, r) {
						var o = s.SUCCESS,
							a = window.localStorage,
							l = e(t),
							c = r ? r : (new Date).getTime() + 31536e6;
						n(c) && (c = c.getTime());
						try {
							a.setItem(l, c + "|" + i)
						} catch(u) {
							o = s.OVERFLOW
						}
						return o
					},
					get: function(t) {
						var n, i, r = window.localStorage,
							o = e(t),
							a = null;
						try {
							a = r.getItem(o)
						} catch(s) {
							return null
						}
						return a ? (n = a.indexOf("|"), i = parseInt(a.substring(0, n), 10), new Date(i).getTime() > (new Date).getTime() || 0 == i ? a = a.substring(n + 1, a.length) : (a = null, this.del(t), null)) : null
					},
					del: function(t) {
						var n = window.localStorage,
							i = e(t),
							r = null;
						try {
							r = n.getItem(i)
						} catch(o) {
							return !1
						}
						return r ? (r = r.substring(r.indexOf("|") + 1, r.length), r && n.removeItem(i), !0) : !1
					}
				}
			}
			var a = "tieba",
				s = {
					SUCCESS: 0,
					FAILURE: 1,
					OVERFLOW: 2
				};
			return {
				set: function() {
					var e = this;
					return !e._storage && (e._storage = i()), e._storage.set.apply(e._storage, arguments)
				},
				get: function() {
					var e = this;
					return !e._storage && (e._storage = i()), e._storage.get.apply(e._storage, arguments)
				},
				remove: function() {
					var e = this;
					return !e._storage && (e._storage = i()), e._storage.del.apply(e._storage, arguments)
				},
				isSupport: function() {
					return !(!window.localStorage && !window.ActiveXObject)
				}
			}
		}(), $.cookie = function(e, t, n) {
			if("undefined" == typeof t) {
				var i = null;
				if(document.cookie && "" != document.cookie)
					for(var r = document.cookie.split(";"), o = 0; o < r.length; o++) {
						var a = jQuery.trim(r[o]);
						if(a.substring(0, e.length + 1) == e + "=") {
							i = decodeURIComponent(a.substring(e.length + 1));
							break
						}
					}
				return i
			}
			n = n || {}, null === t && (t = "", n.expires = -1);
			var s = "";
			if(n.expires && ("number" == typeof n.expires || n.expires.toUTCString)) {
				var l;
				"number" == typeof n.expires ? (l = new Date, l.setTime(l.getTime() + 24 * n.expires * 60 * 60 * 1e3)) : l = n.expires, s = "; expires=" + l.toUTCString()
			}
			var c = n.path ? "; path=" + n.path : "",
				u = n.domain ? "; domain=" + n.domain : "",
				g = n.secure ? "; secure" : "";
			document.cookie = [e, "=", encodeURIComponent(t), s, c, u, g].join("")
		};
		var $$ = function(e, t) {
			this.instance = "jswf_" + (new Date).getTime();
			var n = this.options = $.extend({}, $$.options, t),
				i = this.id = n.id || this.instance,
				r = $(n.container || "<div></div>");
			$$.CallBacks[this.instance] = {};
			var o = n.params,
				a = n.vars,
				s = n.callBacks,
				l = $.extend({}, {
					height: n.height,
					width: n.width
				}, n.properties),
				c = this;
			for(var u in s) $$.CallBacks[this.instance][u] = function(e) {
				return function() {
					return e.apply(c.object, arguments)
				}
			}(s[u]), a[u] = "$.swf.CallBacks." + this.instance + "." + u;
			o.flashVars = $.param(a), $.browser.msie ? (l.classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000", l.codebase = "http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0", o.movie = e) : (l.type = "application/x-shockwave-flash", l.data = e);
			var g = ['<object id="', i, '"'];
			for(var h in l) g.push(" ", h, '="', l[h], '"');
			g.push(">");
			for(var f in o) o[f] !== undefined && g.push('<param name="', f, '" value="', o[f], '" />');
			g.push("</object>"), $.each(r, function(e, t) {
				t.innerHTML = g.join("")
			}), this.getObject()
		};
		$.extend($$, {
			options: {
				id: null,
				height: 1,
				width: 1,
				container: null,
				properties: {
					align: "middle"
				},
				params: {
					quality: "high",
					allowScriptAccess: "always",
					wMode: "transparent",
					swLiveConnect: !0,
					menu: !1
				},
				callBacks: {},
				vars: {}
			},
			CallBacks: {},
			remote: function(obj, fn) {
				var rs = obj.CallFunction('<invoke name="' + fn + '" returntype="javascript">' + __flash__argumentsToXML(arguments, 2) + "</invoke>");
				return eval(rs)
			}
		}), $.extend($$.prototype, {
			toElement: function() {
				return this.object
			},
			getObject: function() {
				var e = this;
				this.object = document[this.id] || window[this.id], this.object || setTimeout(function() {
					e.getObject()
				}, 1)
			},
			remote: function() {
				for(var e = [this.toElement()], t = 0, n = arguments.length; n > t; t++) e.push(arguments[t]);
				return $$.remote.apply($$, e)
			}
		}), $$.getVersion = function() {
			var e = navigator;
			if(e.plugins && e.mimeTypes.length) {
				var t = e.plugins["Shockwave Flash"];
				if(t && t.description) return t.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s)+r/, ".") + ".0"
			} else if(window.ActiveXObject && !window.opera)
				for(var n = 10; n >= 2; n--) try {
					var i = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + n);
					if(i) {
						var r = i.GetVariable("$version");
						return r.replace(/WIN/g, "").replace(/,/g, ".")
					}
				} catch(o) {}
		}, $$.getFlash = function(e) {
			return -1 != navigator.appName.indexOf("Microsoft") ? window[e] : document[e]
		}, $.swf = $$, $.JsLoadManager = $.JLM = {
			use: function(e, t, n, i) {
				if("string" == typeof e) return "function" != typeof t ? (i = t, t = undefined) : i = n, this.loadUrl(e, t, i), void 0;
				if(!this.isArray(e)) throw new Error("JsLoadManager.use: Arguments Illegal!");
				n ? this.loadSerial(e, t, i) : this.loadParallel(e, t, i)
			},
			loaded: {},
			loading: {},
			loadSerial: function(e, t, n) {
				function i() {
					e[++r] ? o.loadUrl(e[r], i, n) : "function" == typeof t && t()
				}
				var r = 0,
					o = this;
				this.loadUrl(e[r], i, n)
			},
			loadParallel: function(e, t, n) {
				for(var i = this, r = !1, o = 0, a = e.length; a > o && (this.loadUrl(e[o], function() {
						i.checkLoaded(e) && ("function" == typeof t && t(), r = !0)
					}, n), !r); o++);
			},
			checkLoaded: function(e) {
				if("string" == typeof e) return !!this.loaded[e];
				for(var t = 0, n = e.length; n > t; t++)
					if(!this.loaded[e[t]]) return !1;
				return !0
			},
			isArray: function(e) {
				return "object" == typeof e && e.constructor === Array
			},
			loadUrl: function(e, t, n) {
				var i = this;
				this.loaded[e] !== undefined ? "function" == typeof t && t(e, this.loaded[e]) : this.loading[e] !== undefined ? "function" == typeof t && this.loading[e].push(t) : (this.loading[e] = [], "function" == typeof t && this.loading[e].push(t), this.createScriptTag(e, function(e, t) {
					i.loaded[e] = t;
					for(var n = 0, r = i.loading[e].length; r > n; n++) i.loading[e][n](e, t);
					delete i.loading[e]
				}, n))
			},
			createScriptTag: function(e, t, n) {
				var i = document.createElement("script");
				i.setAttribute("type", "text/javascript"), i.setAttribute("src", e), n && i.setAttribute("charset", n), i.onload = i.onreadystatechange = function() {
					this.readyState && "loaded" != this.readyState && "complete" != this.readyState || (i.onload = i.onreadystatechange = null, "function" == typeof t && t(e, !0))
				}, i.onerror = function() {
					"function" == typeof t && t(e, !1)
				}, document.getElementsByTagName("head")[0].appendChild(i)
			}
		}, $.fn.tb_html = function(e) {
			if("string" == typeof e) {
				for(var t = 0, n = this.length; n > t; t++) 1 === this[t].nodeType && (jQuery.cleanData(this[t].getElementsByTagName("*")), this[t].innerHTML = e);
				return this
			}
			return this.html(e)
		}, $.tb.location = {
			getHref: function() {
				return this._escape(location.href)
			},
			setHref: function(e) {
				location.href = e
			},
			getSearch: function() {
				return this._escape(location.search)
			},
			getHash: function() {
				return this._escape(location.hash)
			},
			setHash: function(e) {
				location.hash = e
			},
			getHost: function() {
				return location.host
			},
			getHostname: function() {
				return location.hostname
			},
			getPort: function() {
				return location.port
			},
			getProtocol: function() {
				return location.protocol
			},
			getPathname: function() {
				return this._escape(location.pathname)
			},
			reload: function() {
				location.reload()
			},
			getOrigin: function() {
				return this._escape(location.origin)
			},
			_escape: function(e) {
				return e.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/'/g, "&#39;").replace(/"/g, "&quot;")
			},
			_getSearchValue: function(e) {
				var t = location.search.replace(/^\?/, ""),
					n = {};
				if(!t) return e === undefined ? n : undefined;
				t = t.split("&");
				for(var i, r = 0, o = t.length; o > r; r++) i = t[r].indexOf("="), i > 0 ? n[t[r].substring(0, i)] = t[r].substring(i + 1) : n[t[r]] = "";
				return e === undefined ? n : n[e]
			},
			getSearchValue: function(e) {
				function t(e) {
					try {
						return decodeURIComponent(e)
					} catch(t) {
						return e
					}
				}
				if(e) {
					var n = $.tb.getSearch(e);
					return null != n ? $.tb.escapeHTML(t(n)) : null
				}
				var i = $.tb.getSearch();
				for(var r in i) i[r] = $.tb.escapeHTML(t(i[r]));
				return i
			}
		}, $.tb.getSearch = function(e) {
			return $.tb.location._getSearchValue(e)
		}, $.tb.getDecodedSearch = function(e) {
			return $.tb.location.getSearchValue(e)
		}, $.tb.throttle = function(e, t) {
			return function() {
				t = t || 100;
				var n = this,
					i = arguments;
				clearTimeout(e.tId), e.tId = setTimeout(function() {
					e.apply(n, i)
				}, t)
			}
		}, $.tb.alert = function(e) {
			e = $.extend({
				show: !1,
				width: 410
			}, e || {});
			var t = ['<div class="tb_alert_wrapper">', e.iconSrc || e.heading ? '<p class="tb_alert_title">' : "", e.iconSrc ? '<img src="#{iconSrc}" class="tb_alert_title_icon#{iconClass}" />' : "", e.heading ? "<strong>#{heading}</strong>" : "", e.iconSrc || e.heading ? "</p>" : "", '<p class="tb_alert_message">#{message}</p>', '<div class="tb_alert_btn_group"></div>', "</div>"].join(""),
				n = '<a href="#" class="btn_default btn_middle j_btn #{holderClass}" data-value="#{text}">#{text}</a>';
			$root = $($.tb.format(t, e)), e.html = $root;
			var i = new $.dialog(e);
			return e.buttons = e.buttons ? $.isArray(e.buttons) ? e.buttons : [e.buttons] : [], $btn_group = $root.find(".tb_alert_btn_group"), $.each(e.buttons, function(e, t) {
				var r = $($.tb.format(n, t));
				r.bind("click", function(n) {
					n.preventDefault(), (!t.callback || t.callback && t.callback.call(this, e, i) !== !1) && i.close()
				}), $btn_group.append(r)
			}), i.setPosition(), e && e.show || i.show(), i.buttons = $.find(".j_btn"), i
		}
	}(jQuery),
	function(e) {
		e.fn.extend({
			bindData: function(t, n) {
				null == n && (n = "data-field");
				var i = e.json.encode(t);
				return this.attr(n, i), this
			},
			getData: function(t) {
				null == t && (t = "data-field");
				var n = this.attr(t);
				return null == n ? null : e.json.parseJSON(n)
			}
		}), e.tb.dataField = function(t, n) {
			null == n && (n = "data-field");
			var i = e.json.encode(t);
			return i = e.tb.escapeHTML(i), " " + n + '="' + i + '" '
		}
	}(jQuery), window.tbFormat = function(e, t) {
		if("none" == t || null == t) return tempalte;
		for(var n in t) t[n] = $.tb.escapeHTML(String(t[n]));
		return $.tb.format(e, t)
	},
	function(e) {
		var t = {
				tbattr: e.fn.attr,
				tbprop: e.fn.prop
			},
			n = {};
		for(var i in t) ! function(i) {
			var r = t[i];
			n[i] = function() {
				var t = r.apply(this, arguments);
				return "string" == typeof t && (t = e.tb.escapeHTML(t)), t
			}
		}(i);
		e.fn.extend(n)
	}(jQuery),
	function(e) {
		e.sendAjaxError = function(t) {
			if(!t) return !1;
			t = {
				ll: t.ll || "warning",
				tbfeerrormsg: t.msg || "",
				locator: t.locator || "",
				linenum: t.linenum || "",
				modulename: t.modulename || "",
				alarminfo: t.alarminfo || "",
				browser: e.getBrowser().name || "",
				tbfewarning: 1,
				logtype: "js",
				appname: "pc",
				_t: 1e3 * new Date
			};
			try {
				var n = "/ems/page?" + e.param(t);
				e.get(n)
			} catch(i) {}
		}, e.se = e.sendAjaxError
	}(jQuery),
	function(e) {
		e.tb.checkRealName = function(t) {
			try {
				if("undefined" == typeof passport || "undefined" == typeof passport.pop.init) {
					var n = "undefined" != typeof Env && Env.server_time ? Env.server_time : (new Date).getTime(),
						i = "https://passport";
					e.JsLoadManager.use([i + ".baidu.com/passApi/js/uni_login_wrapper.js?cdnversion=" + Math.floor(n / 6e4), i + ".baidu.com/passApi/js/wrapper.js?cdnversion=" + Math.floor(n / 6e4)], function() {
						window.realname = passport.pop.init({
							type: "accRealName",
							apiOpt: {
								product: "tb",
								staticPage: e.tb.location.getProtocol() + "//tieba.baidu.com/tb/static-common/html/pass/v3Jump.html"
							},
							tangram: !0,
							color: "green"
						}), window.realname.show()
					}, !0, "utf-8")
				} else "undefined" == typeof window.realname ? (window.realname = passport.pop.init({
					type: "accRealName",
					apiOpt: {
						product: "tb",
						staticPage: e.tb.location.getProtocol() + "//tieba.baidu.com/tb/static-common/html/pass/v3Jump.html"
					},
					tangram: !0,
					color: "green"
				}), window.realname.show()) : window.realname.show();
				t()
			} catch(r) {}
		}, e.tb.transforEmoji = function(t, n, i) {
			i || (i = !1);
			var r = ["\xba", "\u25ce", "-", "\u25ab", "\u25c6", "\u2664", "\u2640", "\u2642", "\u10da", "\u266c", "\u261e", "\u261c", "\u2706", "\u260e", "\u264b", "\u03a9", "\u2103", "\u2109", "\ud83d\ude04", "\ud83d\ude0d", "\ud83d\ude18", "\ud83d\ude1a", "\ud83d\ude1c", "\ud83d\ude33", "\ud83d\ude01", "\ud83d\ude1e", "\ud83d\ude22", "\ud83d\ude02", "\ud83d\ude2b", "\ud83d\ude28", "\ud83d\ude31", "\ud83d\ude21", "\ud83d\ude37", "\ud83d\ude32", "\ud83d\ude08", "\ud83d\udc37", "\ud83d\udc36", "\ud83d\udc11", "\ud83d\udc35", "\ud83d\udc28", "\ud83d\udc34", "\ud83d\udc3c", "\ud83d\udc2f", "\ud83c\udf6a", "\ud83c\udf7a", "\ud83c\udf66", "\ud83c\udf6d", "\ud83c\udf57", "\ud83c\udf7c", "\ud83d\udd2f", "\ud83c\udf52", "\ud83d\udc40", "\ud83d\udc2d", "\ud83d\ude07", "\ud83d\ude3a", "\ud83d\ude3b", "\ud83d\ude40", "\ud83d\ude3f", "\ud83d\ude39", "\ud83d\ude3e", "\ud83d\udc79", "\ud83d\udc7a", "\ud83c\udf1e", "\ud83c\udf1d", "\ud83c\udf1a", "\ud83c\udf1c", "\ud83c\udf1b", "\ud83d\udc66", "\ud83d\udc67", "\ud83c\udf8e", "\ud83c\udf38", "\ud83c\udf40", "\ud83c\udf39", "\ud83c\udf3b", "\ud83c\udf3a", "\ud83c\udf41", "\ud83c\udf3f", "\ud83c\udf44", "\ud83c\udf35", "\ud83c\udf34", "\ud83c\udf33", "\ud83c\udf30", "\ud83c\udf31", "\ud83c\udf3c", "\ud83c\udf10", "\ud83c\udf19", "\ud83c\udf0b", "\ud83c\udf0c", "\u26c5", "\u26a1", "\u2614", "\u26c4", "\ud83c\udf00", "\ud83c\udf08", "\ud83c\udf0a", "\ud83d\udd25", "\u2728", "\ud83c\udf1f", "\ud83d\udca5", "\ud83d\udcab", "\ud83d\udca2", "\ud83d\udca6", "\ud83d\udca7", "\ud83d\udca4", "\ud83d\udca8", "\ud83c\udf80", "\ud83c\udf02", "\ud83d\udc84", "\ud83d\udc95", "\ud83d\udc96", "\ud83d\udc9e", "\ud83d\udc98", "\ud83d\udc8c", "\ud83d\udc8b", "\ud83d\udc9d", "\ud83c\udf92", "\ud83c\udf93", "\ud83c\udf8f", "\ud83c\udf83", "\ud83d\udc7b", "\ud83c\udf85", "\ud83c\udf84", "\ud83c\udf81", "\ud83d\ude48", "\ud83d\udc12", "\ud83d\udcaf", "\ud83d\udc6f", "\ud83d\udc8d"],
				o = ["1-1.png", "1-2.png", "1-3.png", "1-4.png", "1-5.png", "1-6.png", "1-7.png", "1-8.png", "1-9.png", "1-10.png", "1-11.png", "1-12.png", "1-13.png", "1-14.png", "1-15.png", "1-16.png", "1-17.png", "1-18.png", "1-19.png", "1-20.png", "1-21.png", "1-22.png", "1-23.png", "1-24.png", "1-25.png", "1-26.png", "1-27.png", "1-28.png", "1-29.png", "1-30.png", "1-31.png", "1-32.png", "1-33.png", "1-34.png", "1-35.png", "2-1.png", "2-2.png", "2-3.png", "2-4.png", "2-5.png", "2-6.png", "2-7.png", "2-8.png", "2-9.png", "2-10.png", "2-11.png", "2-12.png", "2-13.png", "2-14.png", "2-15.png", "2-16.png", "2-17.png", "2-18.png", "2-19.png", "2-20.png", "2-21.png", "2-22.png", "2-23.png", "2-24.png", "2-25.png", "2-26.png", "2-27.png", "2-28.png", "2-29.png", "2-30.png", "2-31.png", "2-32.png", "2-33.png", "2-34.png", "2-35.png", "3-1.png", "3-2.png", "3-3.png", "3-4.png", "3-5.png", "3-6.png", "3-7.png", "3-8.png", "3-9.png", "3-10.png", "3-11.png", "3-12.png", "3-13.png", "3-14.png", "3-15.png", "3-16.png", "3-17.png", "3-18.png", "3-19.png", "3-20.png", "3-21.png", "3-22.png", "3-23.png", "3-24.png", "3-25.png", "3-26.png", "3-27.png", "3-28.png", "3-29.png", "3-30.png", "3-31.png", "3-32.png", "3-33.png", "3-34.png", "3-35.png", "4-1.png", "4-2.png", "4-3.png", "4-4.png", "4-5.png", "4-6.png", "4-7.png", "4-8.png", "4-9.png", "4-10.png", "4-11.png", "4-12.png", "4-13.png", "4-14.png", "4-15.png", "4-16.png", "4-17.png", "4-18.png", "4-19.png", "4-20.png", "4-21.png", "4-22.png", "4-23.png"],
				a = {};
			e(r).each(function(e, t) {
				a[t] = "///tb/cms/nickemoji/" + o[e]
			});
			var s, l = [],
				c = {},
				u = [],
				g = new Date,
				h = !1;
			try {
				if(n) {
					e(r).each(function(e, t) {
						n = n.replace(new RegExp(t, "g"), function(e, t) {
							return c[t] = e, u.push(t), "#"
						})
					}), u = u.sort();
					for(var f = n.split(""), p = 0, d = 0; d < f.length; d++) "#" === f[d] && c[u[p]] && (f[d] = c[u[p]], p++);
					e(f).each(function(t, n) {
						s = n, e(r).each(function(e, t) {
							n.replace(new RegExp(t, "g"), function() {
								s = '<img src="' + a[t] + '" class="nicknameEmoji" style="width:13px;height:13px"/>', h = !0
							})
						}), l.push(s)
					});
					var m = Number(g.getFullYear()),
						v = Number(g.getMonth() + 1),
						b = Number(g.getDate() + 1),
						y = l.join("");
					return 2017 === m && 7 === v && 14 > b && i && h && (y = '<div style="color : #fa7021;display: inline-block;">' + y + '<img src="//df/tb/cms/nickemoji/nickname_sign.png" class="activityTemp" style="width:14px;height:14px;margin-left:5px"/></div>'), y
				}
				return t
			} catch(w) {}
		}
	}(jQuery);
! function(e, n) {
	e.getPageData = function(e, t, r) {
		if("undefined" == typeof t && (t = null), r = r || n || {}, e) {
			if("string" != typeof e) return t;
			for(var f = e.split("."), i = f.length, u = 0; i > u; u++) {
				if(e = f[u], !r) return t;
				if("undefined" == typeof r[e]) return Object.hasOwnProperty.call(r, e) && u == i - 1 ? void 0 : t;
				r = r[e]
			}
			return r
		}
		return t
	}
}(jQuery, window.PageData);
! function(t) {
	void 0 === t && new Error("F is not defined, map config aborted.");
	var c = {};
	t.pathRule(function(t) {
		if(t.src.match(/^([\w-]+\/)*[\w-]+$/i)) {
			var c = t.src.split("/"),
				s = c.length;
			3 === s && (c.push(c[2]), t.src = c.join("/"))
		}
	}), t.pathRule(function(t) {
		var c = t.src.match(/([\w-]+\/[\w-]+\/[\w-]+\/[\w-]+)(\.js)?(\?class)?$/i);
		c && (t.src = c[1] + c[2])
	}), t.pathRule(function(t) {
		t.src.match(/\.js/i) || (t.src += ".js");
		var s;
		return;
		var str=t.src;
		if(str.indexOf("login_dialog1")>0||str.indexOf("card")>0||str.indexOf("scroll_panel1")>0||str.indexOf("icons1")>0){
			console.log(str)
			console.log("//df/tb/static-" + t.src);
		}
		else return;
		return "object" == typeof c && (s = c[t.src]) ? (t.src = s, t.src = "//df" + t.src, void 0) : (t.src = "//df/tb/static-" + t.src, void 0)
	}), t.tbConfig = function(t) {
		$.extend(c, t)
	}, t.setDomain("//df")
}(F);
$.stats = {
	_warn: function() {
		"undefined" != typeof console && console.warn("Deprecated method.")
	},
	sendRequest: function() {
		this._warn()
	},
	hive: function() {
		this._warn()
	},
	track: function(e, a, t, n, o) {
		if(t && "object" == typeof t && (o = t, t = ""), n && "object" == typeof n && (o = n, n = ""), document.images) {
			var r = new Image;
			window["bd_pv_" + (new Date).getTime()] = r;
			var s = "https://gsp0.baidu.com/5aAHeD3nKhI2p27j8IqW0jdnxx1xbK/tb/img/track.gif?",
				u = ["client_type=pc_web", "task=" + (a && encodeURIComponent(a) || ""), "locate=" + (e && encodeURIComponent(e) || ""), "type=" + (n && encodeURIComponent(n) || "click"), "url=" + encodeURIComponent(document.location.href), "refer=" + encodeURIComponent(document.referrer)];
			PageData && (u.push("page=" + (t || PageData.page || "")), PageData.forum && (u.push("fid=" + (PageData.forum.id || "")), u.push("fname=" + encodeURIComponent(PageData.forum.name || ""))), PageData.user && (u.push("uid=" + (PageData.user.id || "")), u.push("uname=" + encodeURIComponent(PageData.user.name || "")), u.push("is_new_user=" + (PageData.user.is_new_user || ""))), PageData.thread && u.push("tid=" + (PageData.thread && PageData.thread.thread_id || "")));
			for(var c in o) o.hasOwnProperty(c) && u.push(c + "=" + encodeURIComponent(o[c]));
			s += u.join("&"), r.src = s + "&t=" + (new Date).getTime(), r = null
		}
	},
	redirect: function(e) {
		var a = e.url || "",
			t = ["client_type=pc_web", "tbjump=" + (e.tbjump && encodeURIComponent(e.tbjump) || ""), "task=" + (e.task && encodeURIComponent(e.task) || ""), "locate=" + (e.locate && encodeURIComponent(e.locate) || ""), "type=click", "url=" + encodeURIComponent(document.location.href), "refer=" + encodeURIComponent(document.referrer), "t=" + (new Date).getTime()];
		PageData && (t.push("page=" + (e.page || PageData.page || "")), PageData.forum && (t.push("fid=" + (PageData.forum.id || "")), t.push("fname=" + encodeURIComponent(PageData.forum.name || ""))), PageData.user && (t.push("uid=" + (PageData.user.user_id || PageData.user.id || "")), t.push("uname=" + encodeURIComponent(PageData.user.name || "")), t.push("is_new_user=" + (PageData.user.is_new_user || ""))), PageData.thread && t.push("tid=" + (PageData.thread && PageData.thread.thread_id || "")));
		for(var n in e.extra) e.extra.hasOwnProperty(n) && t.push(n + "=" + encodeURIComponent(e.extra[n]));
		return a + "?" + t.join("&")
	},
	scanPage: function() {
		this._warn()
	},
	processTag: function() {
		this._warn()
	}
};
var Stats = $.stats,
	Statistics = $.stats;
$.tb.Stats = {
		bind: function() {
			$.stats._warn()
		},
		unbind: function() {
			$.stats._warn()
		},
		sendRequest: function() {
			$.stats._warn()
		},
		getPath: function() {
			return $.stats._warn(), ""
		}
	},
	function(e) {
		e("body").bind("mousedown", function(a) {
			for(var t, n = a.target;
				"BODY" != n.tagName;) {
				if(t = e(n).tbattr("locate")) {
					var o = t.split("#") || [];
					e.stats.track(o[0] || "", o[1] || "", o[2] || "");
					break
				}
				n = n.parentNode
			}
		})
	}(jQuery);
var FP_ARG = {
	page: "frs",
	source: "profile",
	tpl: "tieba"
};

(function() {
	function n(t, r, e) {
		if(t === r) return 0 !== t || 1 / t == 1 / r;
		if(null == t || null == r) return t === r;
		if(t._chain && (t = t._wrapped), r._chain && (r = r._wrapped), t.isEqual && A.isFunction(t.isEqual)) return t.isEqual(r);
		if(r.isEqual && A.isFunction(r.isEqual)) return r.isEqual(t);
		var u = l.call(t);
		if(u != l.call(r)) return !1;
		switch(u) {
			case "[object String]":
				return t == String(r);
			case "[object Number]":
				return t != +t ? r != +r : 0 == t ? 1 / t == 1 / r : t == +r;
			case "[object Date]":
			case "[object Boolean]":
				return +t == +r;
			case "[object RegExp]":
				return t.source == r.source && t.global == r.global && t.multiline == r.multiline && t.ignoreCase == r.ignoreCase
		}
		if("object" != typeof t || "object" != typeof r) return !1;
		for(var i = e.length; i--;)
			if(e[i] == t) return !0;
		e.push(t);
		var a = 0,
			c = !0;
		if("[object Array]" == u) {
			if(a = t.length, c = a == r.length)
				for(; a-- && (c = a in t == a in r && n(t[a], r[a], e)););
		} else {
			if("constructor" in t != "constructor" in r || t.constructor != r.constructor) return !1;
			for(var o in t)
				if(A.has(t, o) && (a++, !(c = A.has(r, o) && n(t[o], r[o], e)))) break;
			if(c) {
				for(o in r)
					if(A.has(r, o) && !a--) break;
				c = !a
			}
		}
		return e.pop(), c
	}
	var t = this,
		r = t._,
		e = {},
		u = Array.prototype,
		i = Object.prototype,
		a = Function.prototype,
		c = u.slice,
		o = u.unshift,
		l = i.toString,
		f = i.hasOwnProperty,
		s = u.forEach,
		p = u.map,
		h = u.reduce,
		v = u.reduceRight,
		g = u.filter,
		d = u.every,
		m = u.some,
		y = u.indexOf,
		b = u.lastIndexOf,
		x = Array.isArray,
		j = Object.keys,
		_ = a.bind,
		A = function(n) {
			return new N(n)
		};
	"undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = A), exports._ = A) : t._ = A, A.VERSION = "1.3.3";
	var w = A.each = A.forEach = function(n, t, r) {
		if(null != n)
			if(s && n.forEach === s) n.forEach(t, r);
			else if(n.length === +n.length) {
			for(var u = 0, i = n.length; i > u; u++)
				if(u in n && t.call(r, n[u], u, n) === e) return
		} else
			for(var a in n)
				if(A.has(n, a) && t.call(r, n[a], a, n) === e) return
	};
	A.map = A.collect = function(n, t, r) {
		var e = [];
		return null == n ? e : p && n.map === p ? n.map(t, r) : (w(n, function(n, u, i) {
			e[e.length] = t.call(r, n, u, i)
		}), n.length === +n.length && (e.length = n.length), e)
	}, A.reduce = A.foldl = A.inject = function(n, t, r, e) {
		var u = arguments.length > 2;
		if(null == n && (n = []), h && n.reduce === h) return e && (t = A.bind(t, e)), u ? n.reduce(t, r) : n.reduce(t);
		if(w(n, function(n, i, a) {
				u ? r = t.call(e, r, n, i, a) : (r = n, u = !0)
			}), !u) throw new TypeError("Reduce of empty array with no initial value");
		return r
	}, A.reduceRight = A.foldr = function(n, t, r, e) {
		var u = arguments.length > 2;
		if(null == n && (n = []), v && n.reduceRight === v) return e && (t = A.bind(t, e)), u ? n.reduceRight(t, r) : n.reduceRight(t);
		var i = A.toArray(n).reverse();
		return e && !u && (t = A.bind(t, e)), u ? A.reduce(i, t, r, e) : A.reduce(i, t)
	}, A.find = A.detect = function(n, t, r) {
		var e;
		return E(n, function(n, u, i) {
			return t.call(r, n, u, i) ? (e = n, !0) : void 0
		}), e
	}, A.filter = A.select = function(n, t, r) {
		var e = [];
		return null == n ? e : g && n.filter === g ? n.filter(t, r) : (w(n, function(n, u, i) {
			t.call(r, n, u, i) && (e[e.length] = n)
		}), e)
	}, A.reject = function(n, t, r) {
		var e = [];
		return null == n ? e : (w(n, function(n, u, i) {
			t.call(r, n, u, i) || (e[e.length] = n)
		}), e)
	}, A.every = A.all = function(n, t, r) {
		var u = !0;
		return null == n ? u : d && n.every === d ? n.every(t, r) : (w(n, function(n, i, a) {
			return(u = u && t.call(r, n, i, a)) ? void 0 : e
		}), !!u)
	};
	var E = A.some = A.any = function(n, t, r) {
		t || (t = A.identity);
		var u = !1;
		return null == n ? u : m && n.some === m ? n.some(t, r) : (w(n, function(n, i, a) {
			return u || (u = t.call(r, n, i, a)) ? e : void 0
		}), !!u)
	};
	A.include = A.contains = function(n, t) {
		var r = !1;
		return null == n ? r : y && n.indexOf === y ? -1 != n.indexOf(t) : r = E(n, function(n) {
			return n === t
		})
	}, A.invoke = function(n, t) {
		var r = c.call(arguments, 2);
		return A.map(n, function(n) {
			return(A.isFunction(t) ? t || n : n[t]).apply(n, r)
		})
	}, A.pluck = function(n, t) {
		return A.map(n, function(n) {
			return n[t]
		})
	}, A.max = function(n, t, r) {
		if(!t && A.isArray(n) && n[0] === +n[0]) return Math.max.apply(Math, n);
		if(!t && A.isEmpty(n)) return -1 / 0;
		var e = {
			computed: -1 / 0
		};
		return w(n, function(n, u, i) {
			var a = t ? t.call(r, n, u, i) : n;
			a >= e.computed && (e = {
				value: n,
				computed: a
			})
		}), e.value
	}, A.min = function(n, t, r) {
		if(!t && A.isArray(n) && n[0] === +n[0]) return Math.min.apply(Math, n);
		if(!t && A.isEmpty(n)) return 1 / 0;
		var e = {
			computed: 1 / 0
		};
		return w(n, function(n, u, i) {
			var a = t ? t.call(r, n, u, i) : n;
			a < e.computed && (e = {
				value: n,
				computed: a
			})
		}), e.value
	}, A.shuffle = function(n) {
		var t, r = [];
		return w(n, function(n, e) {
			t = Math.floor(Math.random() * (e + 1)), r[e] = r[t], r[t] = n
		}), r
	}, A.sortBy = function(n, t, r) {
		var e = A.isFunction(t) ? t : function(n) {
			return n[t]
		};
		return A.pluck(A.map(n, function(n, t, u) {
			return {
				value: n,
				criteria: e.call(r, n, t, u)
			}
		}).sort(function(n, t) {
			var r = n.criteria,
				e = t.criteria;
			return void 0 === r ? 1 : void 0 === e ? -1 : e > r ? -1 : r > e ? 1 : 0
		}), "value")
	}, A.groupBy = function(n, t) {
		var r = {},
			e = A.isFunction(t) ? t : function(n) {
				return n[t]
			};
		return w(n, function(n, t) {
			var u = e(n, t);
			(r[u] || (r[u] = [])).push(n)
		}), r
	}, A.sortedIndex = function(n, t, r) {
		r || (r = A.identity);
		for(var e = 0, u = n.length; u > e;) {
			var i = e + u >> 1;
			r(n[i]) < r(t) ? e = i + 1 : u = i
		}
		return e
	}, A.toArray = function(n) {
		return n ? A.isArray(n) ? c.call(n) : A.isArguments(n) ? c.call(n) : n.toArray && A.isFunction(n.toArray) ? n.toArray() : A.values(n) : []
	}, A.size = function(n) {
		return A.isArray(n) ? n.length : A.keys(n).length
	}, A.first = A.head = A.take = function(n, t, r) {
		return null == t || r ? n[0] : c.call(n, 0, t)
	}, A.initial = function(n, t, r) {
		return c.call(n, 0, n.length - (null == t || r ? 1 : t))
	}, A.last = function(n, t, r) {
		return null == t || r ? n[n.length - 1] : c.call(n, Math.max(n.length - t, 0))
	}, A.rest = A.tail = function(n, t, r) {
		return c.call(n, null == t || r ? 1 : t)
	}, A.compact = function(n) {
		return A.filter(n, function(n) {
			return !!n
		})
	}, A.flatten = function(n, t) {
		return A.reduce(n, function(n, r) {
			return A.isArray(r) ? n.concat(t ? r : A.flatten(r)) : (n[n.length] = r, n)
		}, [])
	}, A.without = function(n) {
		return A.difference(n, c.call(arguments, 1))
	}, A.uniq = A.unique = function(n, t, r) {
		var e = r ? A.map(n, r) : n,
			u = [];
		return n.length < 3 && (t = !0), A.reduce(e, function(r, e, i) {
			return(t ? A.last(r) === e && r.length : A.include(r, e)) || (r.push(e), u.push(n[i])), r
		}, []), u
	}, A.union = function() {
		return A.uniq(A.flatten(arguments, !0))
	}, A.intersection = A.intersect = function(n) {
		var t = c.call(arguments, 1);
		return A.filter(A.uniq(n), function(n) {
			return A.every(t, function(t) {
				return A.indexOf(t, n) >= 0
			})
		})
	}, A.difference = function(n) {
		var t = A.flatten(c.call(arguments, 1), !0);
		return A.filter(n, function(n) {
			return !A.include(t, n)
		})
	}, A.zip = function() {
		for(var n = c.call(arguments), t = A.max(A.pluck(n, "length")), r = new Array(t), e = 0; t > e; e++) r[e] = A.pluck(n, "" + e);
		return r
	}, A.indexOf = function(n, t, r) {
		if(null == n) return -1;
		var e, u;
		if(r) return e = A.sortedIndex(n, t), n[e] === t ? e : -1;
		if(y && n.indexOf === y) return n.indexOf(t);
		for(e = 0, u = n.length; u > e; e++)
			if(e in n && n[e] === t) return e;
		return -1
	}, A.lastIndexOf = function(n, t) {
		if(null == n) return -1;
		if(b && n.lastIndexOf === b) return n.lastIndexOf(t);
		for(var r = n.length; r--;)
			if(r in n && n[r] === t) return r;
		return -1
	}, A.range = function(n, t, r) {
		arguments.length <= 1 && (t = n || 0, n = 0), r = arguments[2] || 1;
		for(var e = Math.max(Math.ceil((t - n) / r), 0), u = 0, i = new Array(e); e > u;) i[u++] = n, n += r;
		return i
	};
	var O = function() {};
	A.bind = function(n, t) {
		var r, e;
		if(n.bind === _ && _) return _.apply(n, c.call(arguments, 1));
		if(!A.isFunction(n)) throw new TypeError;
		return e = c.call(arguments, 2), r = function() {
			if(!(this instanceof r)) return n.apply(t, e.concat(c.call(arguments)));
			O.prototype = n.prototype;
			var u = new O,
				i = n.apply(u, e.concat(c.call(arguments)));
			return Object(i) === i ? i : u
		}
	}, A.bindAll = function(n) {
		var t = c.call(arguments, 1);
		return 0 == t.length && (t = A.functions(n)), w(t, function(t) {
			n[t] = A.bind(n[t], n)
		}), n
	}, A.memoize = function(n, t) {
		var r = {};
		return t || (t = A.identity),
			function() {
				var e = t.apply(this, arguments);
				return A.has(r, e) ? r[e] : r[e] = n.apply(this, arguments)
			}
	}, A.delay = function(n, t) {
		var r = c.call(arguments, 2);
		return setTimeout(function() {
			return n.apply(null, r)
		}, t)
	}, A.defer = function(n) {
		return A.delay.apply(A, [n, 1].concat(c.call(arguments, 1)))
	}, A.throttle = function(n, t) {
		var r, e, u, i, a, c, o = A.debounce(function() {
			a = i = !1
		}, t);
		return function() {
			r = this, e = arguments;
			var l = function() {
				u = null, a && n.apply(r, e), o()
			};
			return u || (u = setTimeout(l, t)), i ? a = !0 : c = n.apply(r, e), o(), i = !0, c
		}
	}, A.debounce = function(n, t, r) {
		var e;
		return function() {
			var u = this,
				i = arguments,
				a = function() {
					e = null, r || n.apply(u, i)
				};
			r && !e && n.apply(u, i), clearTimeout(e), e = setTimeout(a, t)
		}
	}, A.once = function(n) {
		var t, r = !1;
		return function() {
			return r ? t : (r = !0, t = n.apply(this, arguments))
		}
	}, A.wrap = function(n, t) {
		return function() {
			var r = [n].concat(c.call(arguments, 0));
			return t.apply(this, r)
		}
	}, A.compose = function() {
		var n = arguments;
		return function() {
			for(var t = arguments, r = n.length - 1; r >= 0; r--) t = [n[r].apply(this, t)];
			return t[0]
		}
	}, A.after = function(n, t) {
		return 0 >= n ? t() : function() {
			return --n < 1 ? t.apply(this, arguments) : void 0
		}
	}, A.keys = j || function(n) {
		if(n !== Object(n)) throw new TypeError("Invalid object");
		var t = [];
		for(var r in n) A.has(n, r) && (t[t.length] = r);
		return t
	}, A.values = function(n) {
		return A.map(n, A.identity)
	}, A.functions = A.methods = function(n) {
		var t = [];
		for(var r in n) A.isFunction(n[r]) && t.push(r);
		return t.sort()
	}, A.extend = function(n) {
		return w(c.call(arguments, 1), function(t) {
			for(var r in t) n[r] = t[r]
		}), n
	}, A.pick = function(n) {
		var t = {};
		return w(A.flatten(c.call(arguments, 1)), function(r) {
			r in n && (t[r] = n[r])
		}), t
	}, A.defaults = function(n) {
		return w(c.call(arguments, 1), function(t) {
			for(var r in t) null == n[r] && (n[r] = t[r])
		}), n
	}, A.clone = function(n) {
		return A.isObject(n) ? A.isArray(n) ? n.slice() : A.extend({}, n) : n
	}, A.tap = function(n, t) {
		return t(n), n
	}, A.isEqual = function(t, r) {
		return n(t, r, [])
	}, A.isEmpty = function(n) {
		if(null == n) return !0;
		if(A.isArray(n) || A.isString(n)) return 0 === n.length;
		for(var t in n)
			if(A.has(n, t)) return !1;
		return !0
	}, A.isElement = function(n) {
		return !(!n || 1 != n.nodeType)
	}, A.isArray = x || function(n) {
		return "[object Array]" == l.call(n)
	}, A.isObject = function(n) {
		return n === Object(n)
	}, A.isArguments = function(n) {
		return "[object Arguments]" == l.call(n)
	}, A.isArguments(arguments) || (A.isArguments = function(n) {
		return !(!n || !A.has(n, "callee"))
	}), A.isFunction = function(n) {
		return "[object Function]" == l.call(n)
	}, A.isString = function(n) {
		return "[object String]" == l.call(n)
	}, A.isNumber = function(n) {
		return "[object Number]" == l.call(n)
	}, A.isFinite = function(n) {
		return A.isNumber(n) && isFinite(n)
	}, A.isNaN = function(n) {
		return n !== n
	}, A.isBoolean = function(n) {
		return n === !0 || n === !1 || "[object Boolean]" == l.call(n)
	}, A.isDate = function(n) {
		return "[object Date]" == l.call(n)
	}, A.isRegExp = function(n) {
		return "[object RegExp]" == l.call(n)
	}, A.isNull = function(n) {
		return null === n
	}, A.isUndefined = function(n) {
		return void 0 === n
	}, A.has = function(n, t) {
		return f.call(n, t)
	}, A.noConflict = function() {
		return t._ = r, this
	}, A.identity = function(n) {
		return n
	}, A.times = function(n, t, r) {
		for(var e = 0; n > e; e++) t.call(r, e)
	}, A.escape = function(n) {
		return("" + n).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#x27;").replace(/\//g, "&#x2F;")
	}, A.result = function(n, t) {
		if(null == n) return null;
		var r = n[t];
		return A.isFunction(r) ? r.call(n) : r
	}, A.mixin = function(n) {
		w(A.functions(n), function(t) {
			B(t, A[t] = n[t])
		})
	};
	var F = 0;
	A.uniqueId = function(n) {
		var t = F++;
		return n ? n + t : t
	}, A.templateSettings = {
		evaluate: /<%([\s\S]+?)%>/g,
		interpolate: /<%=([\s\S]+?)%>/g,
		escape: /<%-([\s\S]+?)%>/g
	};
	var q = /.^/,
		k = {
			"\\": "\\",
			"'": "'",
			r: "\r",
			n: "\n",
			t: "	",
			u2028: "\u2028",
			u2029: "\u2029"
		};
	for(var S in k) k[k[S]] = S;
	var R = /\\|'|\r|\n|\t|\u2028|\u2029/g,
		I = /\\(\\|'|r|n|t|u2028|u2029)/g,
		M = function(n) {
			return n.replace(I, function(n, t) {
				return k[t]
			})
		};
	A.template = function(n, t, r) {
		r = A.defaults(r || {}, A.templateSettings);
		var e = "__p+='" + n.replace(R, function(n) {
			return "\\" + k[n]
		}).replace(r.escape || q, function(n, t) {
			return "'+\n_.escape(" + M(t) + ")+\n'"
		}).replace(r.interpolate || q, function(n, t) {
			return "'+\n(" + M(t) + ")+\n'"
		}).replace(r.evaluate || q, function(n, t) {
			return "';\n" + M(t) + "\n;__p+='"
		}) + "';\n";
		r.variable || (e = "with(obj||{}){\n" + e + "}\n"), e = "var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n" + e + "return __p;\n";
		var u = new Function(r.variable || "obj", "_", e);
		if(t) return u(t, A);
		var i = function(n) {
			return u.call(this, n, A)
		};
		return i.source = "function(" + (r.variable || "obj") + "){\n" + e + "}", i
	}, A.chain = function(n) {
		return A(n).chain()
	};
	var N = function(n) {
		this._wrapped = n
	};
	A.prototype = N.prototype;
	var T = function(n, t) {
			return t ? A(n).chain() : n
		},
		B = function(n, t) {
			N.prototype[n] = function() {
				var n = c.call(arguments);
				return o.call(n, this._wrapped), T(t.apply(A, n), this._chain)
			}
		};
	A.mixin(A), w(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function(n) {
		var t = u[n];
		N.prototype[n] = function() {
			var r = this._wrapped;
			t.apply(r, arguments);
			var e = r.length;
			return "shift" != n && "splice" != n || 0 !== e || delete r[0], T(r, this._chain)
		}
	}), w(["concat", "join", "slice"], function(n) {
		var t = u[n];
		N.prototype[n] = function() {
			return T(t.apply(this._wrapped, arguments), this._chain)
		}
	}), N.prototype.chain = function() {
		return this._chain = !0, this
	}, N.prototype.value = function() {
		return this._wrapped
	}
}).call(this);
var QRCode;
! function() {
	function t(t) {
		this.mode = u.MODE_8BIT_BYTE, this.data = t, this.parsedData = [];
		for(var e = 0, r = this.data.length; r > e; e++) {
			var o = [],
				n = this.data.charCodeAt(e);
			n > 65536 ? (o[0] = 240 | (1835008 & n) >>> 18, o[1] = 128 | (258048 & n) >>> 12, o[2] = 128 | (4032 & n) >>> 6, o[3] = 128 | 63 & n) : n > 2048 ? (o[0] = 224 | (61440 & n) >>> 12, o[1] = 128 | (4032 & n) >>> 6, o[2] = 128 | 63 & n) : n > 128 ? (o[0] = 192 | (1984 & n) >>> 6, o[1] = 128 | 63 & n) : o[0] = n, this.parsedData.push(o)
		}
		this.parsedData = Array.prototype.concat.apply([], this.parsedData), this.parsedData.length != this.data.length && (this.parsedData.unshift(191), this.parsedData.unshift(187), this.parsedData.unshift(239))
	}

	function e(t, e) {
		this.typeNumber = t, this.errorCorrectLevel = e, this.modules = null, this.moduleCount = 0, this.dataCache = null, this.dataList = []
	}

	function r(t, e) {
		if(void 0 == t.length) throw new Error(t.length + "/" + e);
		for(var r = 0; r < t.length && 0 == t[r];) r++;
		this.num = new Array(t.length - r + e);
		for(var o = 0; o < t.length - r; o++) this.num[o] = t[o + r]
	}

	function o(t, e) {
		this.totalCount = t, this.dataCount = e
	}

	function n() {
		this.buffer = [], this.length = 0
	}

	function i() {
		return "undefined" != typeof CanvasRenderingContext2D
	}

	function a() {
		var t = !1,
			e = navigator.userAgent;
		return /android/i.test(e) && (t = !0, aMat = e.toString().match(/android ([0-9]\.[0-9])/i), aMat && aMat[1] && (t = parseFloat(aMat[1]))), t
	}

	function s(t, e) {
		for(var r = 1, o = h(t), n = 0, i = p.length; i >= n; n++) {
			var a = 0;
			switch(e) {
				case l.L:
					a = p[n][0];
					break;
				case l.M:
					a = p[n][1];
					break;
				case l.Q:
					a = p[n][2];
					break;
				case l.H:
					a = p[n][3]
			}
			if(a >= o) break;
			r++
		}
		if(r > p.length) throw new Error("Too long data");
		return r
	}

	function h(t) {
		var e = encodeURI(t).toString().replace(/\%[0-9a-fA-F]{2}/g, "a");
		return e.length + (e.length != t ? 3 : 0)
	}
	t.prototype = {
		getLength: function() {
			return this.parsedData.length
		},
		write: function(t) {
			for(var e = 0, r = this.parsedData.length; r > e; e++) t.put(this.parsedData[e], 8)
		}
	}, e.prototype = {
		addData: function(e) {
			var r = new t(e);
			this.dataList.push(r), this.dataCache = null
		},
		isDark: function(t, e) {
			if(0 > t || this.moduleCount <= t || 0 > e || this.moduleCount <= e) throw new Error(t + "," + e);
			return this.modules[t][e]
		},
		getModuleCount: function() {
			return this.moduleCount
		},
		make: function() {
			this.makeImpl(!1, this.getBestMaskPattern())
		},
		makeImpl: function(t, r) {
			this.moduleCount = 4 * this.typeNumber + 17, this.modules = new Array(this.moduleCount);
			for(var o = 0; o < this.moduleCount; o++) {
				this.modules[o] = new Array(this.moduleCount);
				for(var n = 0; n < this.moduleCount; n++) this.modules[o][n] = null
			}
			this.setupPositionProbePattern(0, 0), this.setupPositionProbePattern(this.moduleCount - 7, 0), this.setupPositionProbePattern(0, this.moduleCount - 7), this.setupPositionAdjustPattern(), this.setupTimingPattern(), this.setupTypeInfo(t, r), this.typeNumber >= 7 && this.setupTypeNumber(t), null == this.dataCache && (this.dataCache = e.createData(this.typeNumber, this.errorCorrectLevel, this.dataList)), this.mapData(this.dataCache, r)
		},
		setupPositionProbePattern: function(t, e) {
			for(var r = -1; 7 >= r; r++)
				if(!(-1 >= t + r || this.moduleCount <= t + r))
					for(var o = -1; 7 >= o; o++) - 1 >= e + o || this.moduleCount <= e + o || (this.modules[t + r][e + o] = r >= 0 && 6 >= r && (0 == o || 6 == o) || o >= 0 && 6 >= o && (0 == r || 6 == r) || r >= 2 && 4 >= r && o >= 2 && 4 >= o ? !0 : !1)
		},
		getBestMaskPattern: function() {
			for(var t = 0, e = 0, r = 0; 8 > r; r++) {
				this.makeImpl(!0, r);
				var o = f.getLostPoint(this);
				(0 == r || t > o) && (t = o, e = r)
			}
			return e
		},
		createMovieClip: function(t, e, r) {
			var o = t.createEmptyMovieClip(e, r),
				n = 1;
			this.make();
			for(var i = 0; i < this.modules.length; i++)
				for(var a = i * n, s = 0; s < this.modules[i].length; s++) {
					var h = s * n,
						u = this.modules[i][s];
					u && (o.beginFill(0, 100), o.moveTo(h, a), o.lineTo(h + n, a), o.lineTo(h + n, a + n), o.lineTo(h, a + n), o.endFill())
				}
			return o
		},
		setupTimingPattern: function() {
			for(var t = 8; t < this.moduleCount - 8; t++) null == this.modules[t][6] && (this.modules[t][6] = t % 2 == 0);
			for(var e = 8; e < this.moduleCount - 8; e++) null == this.modules[6][e] && (this.modules[6][e] = e % 2 == 0)
		},
		setupPositionAdjustPattern: function() {
			for(var t = f.getPatternPosition(this.typeNumber), e = 0; e < t.length; e++)
				for(var r = 0; r < t.length; r++) {
					var o = t[e],
						n = t[r];
					if(null == this.modules[o][n])
						for(var i = -2; 2 >= i; i++)
							for(var a = -2; 2 >= a; a++) this.modules[o + i][n + a] = -2 == i || 2 == i || -2 == a || 2 == a || 0 == i && 0 == a ? !0 : !1
				}
		},
		setupTypeNumber: function(t) {
			for(var e = f.getBCHTypeNumber(this.typeNumber), r = 0; 18 > r; r++) {
				var o = !t && 1 == (e >> r & 1);
				this.modules[Math.floor(r / 3)][r % 3 + this.moduleCount - 8 - 3] = o
			}
			for(var r = 0; 18 > r; r++) {
				var o = !t && 1 == (e >> r & 1);
				this.modules[r % 3 + this.moduleCount - 8 - 3][Math.floor(r / 3)] = o
			}
		},
		setupTypeInfo: function(t, e) {
			for(var r = this.errorCorrectLevel << 3 | e, o = f.getBCHTypeInfo(r), n = 0; 15 > n; n++) {
				var i = !t && 1 == (o >> n & 1);
				6 > n ? this.modules[n][8] = i : 8 > n ? this.modules[n + 1][8] = i : this.modules[this.moduleCount - 15 + n][8] = i
			}
			for(var n = 0; 15 > n; n++) {
				var i = !t && 1 == (o >> n & 1);
				8 > n ? this.modules[8][this.moduleCount - n - 1] = i : 9 > n ? this.modules[8][15 - n - 1 + 1] = i : this.modules[8][15 - n - 1] = i
			}
			this.modules[this.moduleCount - 8][8] = !t
		},
		mapData: function(t, e) {
			for(var r = -1, o = this.moduleCount - 1, n = 7, i = 0, a = this.moduleCount - 1; a > 0; a -= 2)
				for(6 == a && a--;;) {
					for(var s = 0; 2 > s; s++)
						if(null == this.modules[o][a - s]) {
							var h = !1;
							i < t.length && (h = 1 == (t[i] >>> n & 1));
							var u = f.getMask(e, o, a - s);
							u && (h = !h), this.modules[o][a - s] = h, n--, -1 == n && (i++, n = 7)
						}
					if(o += r, 0 > o || this.moduleCount <= o) {
						o -= r, r = -r;
						break
					}
				}
		}
	}, e.PAD0 = 236, e.PAD1 = 17, e.createData = function(t, r, i) {
		for(var a = o.getRSBlocks(t, r), s = new n, h = 0; h < i.length; h++) {
			var u = i[h];
			s.put(u.mode, 4), s.put(u.getLength(), f.getLengthInBits(u.mode, t)), u.write(s)
		}
		for(var l = 0, h = 0; h < a.length; h++) l += a[h].dataCount;
		if(s.getLengthInBits() > 8 * l) throw new Error("code length overflow. (" + s.getLengthInBits() + ">" + 8 * l + ")");
		for(s.getLengthInBits() + 4 <= 8 * l && s.put(0, 4); s.getLengthInBits() % 8 != 0;) s.putBit(!1);
		for(;;) {
			if(s.getLengthInBits() >= 8 * l) break;
			if(s.put(e.PAD0, 8), s.getLengthInBits() >= 8 * l) break;
			s.put(e.PAD1, 8)
		}
		return e.createBytes(s, a)
	}, e.createBytes = function(t, e) {
		for(var o = 0, n = 0, i = 0, a = new Array(e.length), s = new Array(e.length), h = 0; h < e.length; h++) {
			var u = e[h].dataCount,
				l = e[h].totalCount - u;
			n = Math.max(n, u), i = Math.max(i, l), a[h] = new Array(u);
			for(var g = 0; g < a[h].length; g++) a[h][g] = 255 & t.buffer[g + o];
			o += u;
			var d = f.getErrorCorrectPolynomial(l),
				c = new r(a[h], d.getLength() - 1),
				p = c.mod(d);
			s[h] = new Array(d.getLength() - 1);
			for(var g = 0; g < s[h].length; g++) {
				var m = g + p.getLength() - s[h].length;
				s[h][g] = m >= 0 ? p.get(m) : 0
			}
		}
		for(var v = 0, g = 0; g < e.length; g++) v += e[g].totalCount;
		for(var _ = new Array(v), C = 0, g = 0; n > g; g++)
			for(var h = 0; h < e.length; h++) g < a[h].length && (_[C++] = a[h][g]);
		for(var g = 0; i > g; g++)
			for(var h = 0; h < e.length; h++) g < s[h].length && (_[C++] = s[h][g]);
		return _
	};
	for(var u = {
			MODE_NUMBER: 1,
			MODE_ALPHA_NUM: 2,
			MODE_8BIT_BYTE: 4,
			MODE_KANJI: 8
		}, l = {
			L: 1,
			M: 0,
			Q: 3,
			H: 2
		}, g = {
			PATTERN000: 0,
			PATTERN001: 1,
			PATTERN010: 2,
			PATTERN011: 3,
			PATTERN100: 4,
			PATTERN101: 5,
			PATTERN110: 6,
			PATTERN111: 7
		}, f = {
			PATTERN_POSITION_TABLE: [
				[],
				[6, 18],
				[6, 22],
				[6, 26],
				[6, 30],
				[6, 34],
				[6, 22, 38],
				[6, 24, 42],
				[6, 26, 46],
				[6, 28, 50],
				[6, 30, 54],
				[6, 32, 58],
				[6, 34, 62],
				[6, 26, 46, 66],
				[6, 26, 48, 70],
				[6, 26, 50, 74],
				[6, 30, 54, 78],
				[6, 30, 56, 82],
				[6, 30, 58, 86],
				[6, 34, 62, 90],
				[6, 28, 50, 72, 94],
				[6, 26, 50, 74, 98],
				[6, 30, 54, 78, 102],
				[6, 28, 54, 80, 106],
				[6, 32, 58, 84, 110],
				[6, 30, 58, 86, 114],
				[6, 34, 62, 90, 118],
				[6, 26, 50, 74, 98, 122],
				[6, 30, 54, 78, 102, 126],
				[6, 26, 52, 78, 104, 130],
				[6, 30, 56, 82, 108, 134],
				[6, 34, 60, 86, 112, 138],
				[6, 30, 58, 86, 114, 142],
				[6, 34, 62, 90, 118, 146],
				[6, 30, 54, 78, 102, 126, 150],
				[6, 24, 50, 76, 102, 128, 154],
				[6, 28, 54, 80, 106, 132, 158],
				[6, 32, 58, 84, 110, 136, 162],
				[6, 26, 54, 82, 110, 138, 166],
				[6, 30, 58, 86, 114, 142, 170]
			],
			G15: 1335,
			G18: 7973,
			G15_MASK: 21522,
			getBCHTypeInfo: function(t) {
				for(var e = t << 10; f.getBCHDigit(e) - f.getBCHDigit(f.G15) >= 0;) e ^= f.G15 << f.getBCHDigit(e) - f.getBCHDigit(f.G15);
				return(t << 10 | e) ^ f.G15_MASK
			},
			getBCHTypeNumber: function(t) {
				for(var e = t << 12; f.getBCHDigit(e) - f.getBCHDigit(f.G18) >= 0;) e ^= f.G18 << f.getBCHDigit(e) - f.getBCHDigit(f.G18);
				return t << 12 | e
			},
			getBCHDigit: function(t) {
				for(var e = 0; 0 != t;) e++, t >>>= 1;
				return e
			},
			getPatternPosition: function(t) {
				return f.PATTERN_POSITION_TABLE[t - 1]
			},
			getMask: function(t, e, r) {
				switch(t) {
					case g.PATTERN000:
						return(e + r) % 2 == 0;
					case g.PATTERN001:
						return e % 2 == 0;
					case g.PATTERN010:
						return r % 3 == 0;
					case g.PATTERN011:
						return(e + r) % 3 == 0;
					case g.PATTERN100:
						return(Math.floor(e / 2) + Math.floor(r / 3)) % 2 == 0;
					case g.PATTERN101:
						return e * r % 2 + e * r % 3 == 0;
					case g.PATTERN110:
						return(e * r % 2 + e * r % 3) % 2 == 0;
					case g.PATTERN111:
						return(e * r % 3 + (e + r) % 2) % 2 == 0;
					default:
						throw new Error("bad maskPattern:" + t)
				}
			},
			getErrorCorrectPolynomial: function(t) {
				for(var e = new r([1], 0), o = 0; t > o; o++) e = e.multiply(new r([1, d.gexp(o)], 0));
				return e
			},
			getLengthInBits: function(t, e) {
				if(e >= 1 && 10 > e) switch(t) {
					case u.MODE_NUMBER:
						return 10;
					case u.MODE_ALPHA_NUM:
						return 9;
					case u.MODE_8BIT_BYTE:
						return 8;
					case u.MODE_KANJI:
						return 8;
					default:
						throw new Error("mode:" + t)
				} else if(27 > e) switch(t) {
					case u.MODE_NUMBER:
						return 12;
					case u.MODE_ALPHA_NUM:
						return 11;
					case u.MODE_8BIT_BYTE:
						return 16;
					case u.MODE_KANJI:
						return 10;
					default:
						throw new Error("mode:" + t)
				} else {
					if(!(41 > e)) throw new Error("type:" + e);
					switch(t) {
						case u.MODE_NUMBER:
							return 14;
						case u.MODE_ALPHA_NUM:
							return 13;
						case u.MODE_8BIT_BYTE:
							return 16;
						case u.MODE_KANJI:
							return 12;
						default:
							throw new Error("mode:" + t)
					}
				}
			},
			getLostPoint: function(t) {
				for(var e = t.getModuleCount(), r = 0, o = 0; e > o; o++)
					for(var n = 0; e > n; n++) {
						for(var i = 0, a = t.isDark(o, n), s = -1; 1 >= s; s++)
							if(!(0 > o + s || o + s >= e))
								for(var h = -1; 1 >= h; h++) 0 > n + h || n + h >= e || (0 != s || 0 != h) && a == t.isDark(o + s, n + h) && i++;
						i > 5 && (r += 3 + i - 5)
					}
				for(var o = 0; e - 1 > o; o++)
					for(var n = 0; e - 1 > n; n++) {
						var u = 0;
						t.isDark(o, n) && u++, t.isDark(o + 1, n) && u++, t.isDark(o, n + 1) && u++, t.isDark(o + 1, n + 1) && u++, (0 == u || 4 == u) && (r += 3)
					}
				for(var o = 0; e > o; o++)
					for(var n = 0; e - 6 > n; n++) t.isDark(o, n) && !t.isDark(o, n + 1) && t.isDark(o, n + 2) && t.isDark(o, n + 3) && t.isDark(o, n + 4) && !t.isDark(o, n + 5) && t.isDark(o, n + 6) && (r += 40);
				for(var n = 0; e > n; n++)
					for(var o = 0; e - 6 > o; o++) t.isDark(o, n) && !t.isDark(o + 1, n) && t.isDark(o + 2, n) && t.isDark(o + 3, n) && t.isDark(o + 4, n) && !t.isDark(o + 5, n) && t.isDark(o + 6, n) && (r += 40);
				for(var l = 0, n = 0; e > n; n++)
					for(var o = 0; e > o; o++) t.isDark(o, n) && l++;
				var g = Math.abs(100 * l / e / e - 50) / 5;
				return r += 10 * g
			}
		}, d = {
			glog: function(t) {
				if(1 > t) throw new Error("glog(" + t + ")");
				return d.LOG_TABLE[t]
			},
			gexp: function(t) {
				for(; 0 > t;) t += 255;
				for(; t >= 256;) t -= 255;
				return d.EXP_TABLE[t]
			},
			EXP_TABLE: new Array(256),
			LOG_TABLE: new Array(256)
		}, c = 0; 8 > c; c++) d.EXP_TABLE[c] = 1 << c;
	for(var c = 8; 256 > c; c++) d.EXP_TABLE[c] = d.EXP_TABLE[c - 4] ^ d.EXP_TABLE[c - 5] ^ d.EXP_TABLE[c - 6] ^ d.EXP_TABLE[c - 8];
	for(var c = 0; 255 > c; c++) d.LOG_TABLE[d.EXP_TABLE[c]] = c;
	r.prototype = {
		get: function(t) {
			return this.num[t]
		},
		getLength: function() {
			return this.num.length
		},
		multiply: function(t) {
			for(var e = new Array(this.getLength() + t.getLength() - 1), o = 0; o < this.getLength(); o++)
				for(var n = 0; n < t.getLength(); n++) e[o + n] ^= d.gexp(d.glog(this.get(o)) + d.glog(t.get(n)));
			return new r(e, 0)
		},
		mod: function(t) {
			if(this.getLength() - t.getLength() < 0) return this;
			for(var e = d.glog(this.get(0)) - d.glog(t.get(0)), o = new Array(this.getLength()), n = 0; n < this.getLength(); n++) o[n] = this.get(n);
			for(var n = 0; n < t.getLength(); n++) o[n] ^= d.gexp(d.glog(t.get(n)) + e);
			return new r(o, 0).mod(t)
		}
	}, o.RS_BLOCK_TABLE = [
		[1, 26, 19],
		[1, 26, 16],
		[1, 26, 13],
		[1, 26, 9],
		[1, 44, 34],
		[1, 44, 28],
		[1, 44, 22],
		[1, 44, 16],
		[1, 70, 55],
		[1, 70, 44],
		[2, 35, 17],
		[2, 35, 13],
		[1, 100, 80],
		[2, 50, 32],
		[2, 50, 24],
		[4, 25, 9],
		[1, 134, 108],
		[2, 67, 43],
		[2, 33, 15, 2, 34, 16],
		[2, 33, 11, 2, 34, 12],
		[2, 86, 68],
		[4, 43, 27],
		[4, 43, 19],
		[4, 43, 15],
		[2, 98, 78],
		[4, 49, 31],
		[2, 32, 14, 4, 33, 15],
		[4, 39, 13, 1, 40, 14],
		[2, 121, 97],
		[2, 60, 38, 2, 61, 39],
		[4, 40, 18, 2, 41, 19],
		[4, 40, 14, 2, 41, 15],
		[2, 146, 116],
		[3, 58, 36, 2, 59, 37],
		[4, 36, 16, 4, 37, 17],
		[4, 36, 12, 4, 37, 13],
		[2, 86, 68, 2, 87, 69],
		[4, 69, 43, 1, 70, 44],
		[6, 43, 19, 2, 44, 20],
		[6, 43, 15, 2, 44, 16],
		[4, 101, 81],
		[1, 80, 50, 4, 81, 51],
		[4, 50, 22, 4, 51, 23],
		[3, 36, 12, 8, 37, 13],
		[2, 116, 92, 2, 117, 93],
		[6, 58, 36, 2, 59, 37],
		[4, 46, 20, 6, 47, 21],
		[7, 42, 14, 4, 43, 15],
		[4, 133, 107],
		[8, 59, 37, 1, 60, 38],
		[8, 44, 20, 4, 45, 21],
		[12, 33, 11, 4, 34, 12],
		[3, 145, 115, 1, 146, 116],
		[4, 64, 40, 5, 65, 41],
		[11, 36, 16, 5, 37, 17],
		[11, 36, 12, 5, 37, 13],
		[5, 109, 87, 1, 110, 88],
		[5, 65, 41, 5, 66, 42],
		[5, 54, 24, 7, 55, 25],
		[11, 36, 12],
		[5, 122, 98, 1, 123, 99],
		[7, 73, 45, 3, 74, 46],
		[15, 43, 19, 2, 44, 20],
		[3, 45, 15, 13, 46, 16],
		[1, 135, 107, 5, 136, 108],
		[10, 74, 46, 1, 75, 47],
		[1, 50, 22, 15, 51, 23],
		[2, 42, 14, 17, 43, 15],
		[5, 150, 120, 1, 151, 121],
		[9, 69, 43, 4, 70, 44],
		[17, 50, 22, 1, 51, 23],
		[2, 42, 14, 19, 43, 15],
		[3, 141, 113, 4, 142, 114],
		[3, 70, 44, 11, 71, 45],
		[17, 47, 21, 4, 48, 22],
		[9, 39, 13, 16, 40, 14],
		[3, 135, 107, 5, 136, 108],
		[3, 67, 41, 13, 68, 42],
		[15, 54, 24, 5, 55, 25],
		[15, 43, 15, 10, 44, 16],
		[4, 144, 116, 4, 145, 117],
		[17, 68, 42],
		[17, 50, 22, 6, 51, 23],
		[19, 46, 16, 6, 47, 17],
		[2, 139, 111, 7, 140, 112],
		[17, 74, 46],
		[7, 54, 24, 16, 55, 25],
		[34, 37, 13],
		[4, 151, 121, 5, 152, 122],
		[4, 75, 47, 14, 76, 48],
		[11, 54, 24, 14, 55, 25],
		[16, 45, 15, 14, 46, 16],
		[6, 147, 117, 4, 148, 118],
		[6, 73, 45, 14, 74, 46],
		[11, 54, 24, 16, 55, 25],
		[30, 46, 16, 2, 47, 17],
		[8, 132, 106, 4, 133, 107],
		[8, 75, 47, 13, 76, 48],
		[7, 54, 24, 22, 55, 25],
		[22, 45, 15, 13, 46, 16],
		[10, 142, 114, 2, 143, 115],
		[19, 74, 46, 4, 75, 47],
		[28, 50, 22, 6, 51, 23],
		[33, 46, 16, 4, 47, 17],
		[8, 152, 122, 4, 153, 123],
		[22, 73, 45, 3, 74, 46],
		[8, 53, 23, 26, 54, 24],
		[12, 45, 15, 28, 46, 16],
		[3, 147, 117, 10, 148, 118],
		[3, 73, 45, 23, 74, 46],
		[4, 54, 24, 31, 55, 25],
		[11, 45, 15, 31, 46, 16],
		[7, 146, 116, 7, 147, 117],
		[21, 73, 45, 7, 74, 46],
		[1, 53, 23, 37, 54, 24],
		[19, 45, 15, 26, 46, 16],
		[5, 145, 115, 10, 146, 116],
		[19, 75, 47, 10, 76, 48],
		[15, 54, 24, 25, 55, 25],
		[23, 45, 15, 25, 46, 16],
		[13, 145, 115, 3, 146, 116],
		[2, 74, 46, 29, 75, 47],
		[42, 54, 24, 1, 55, 25],
		[23, 45, 15, 28, 46, 16],
		[17, 145, 115],
		[10, 74, 46, 23, 75, 47],
		[10, 54, 24, 35, 55, 25],
		[19, 45, 15, 35, 46, 16],
		[17, 145, 115, 1, 146, 116],
		[14, 74, 46, 21, 75, 47],
		[29, 54, 24, 19, 55, 25],
		[11, 45, 15, 46, 46, 16],
		[13, 145, 115, 6, 146, 116],
		[14, 74, 46, 23, 75, 47],
		[44, 54, 24, 7, 55, 25],
		[59, 46, 16, 1, 47, 17],
		[12, 151, 121, 7, 152, 122],
		[12, 75, 47, 26, 76, 48],
		[39, 54, 24, 14, 55, 25],
		[22, 45, 15, 41, 46, 16],
		[6, 151, 121, 14, 152, 122],
		[6, 75, 47, 34, 76, 48],
		[46, 54, 24, 10, 55, 25],
		[2, 45, 15, 64, 46, 16],
		[17, 152, 122, 4, 153, 123],
		[29, 74, 46, 14, 75, 47],
		[49, 54, 24, 10, 55, 25],
		[24, 45, 15, 46, 46, 16],
		[4, 152, 122, 18, 153, 123],
		[13, 74, 46, 32, 75, 47],
		[48, 54, 24, 14, 55, 25],
		[42, 45, 15, 32, 46, 16],
		[20, 147, 117, 4, 148, 118],
		[40, 75, 47, 7, 76, 48],
		[43, 54, 24, 22, 55, 25],
		[10, 45, 15, 67, 46, 16],
		[19, 148, 118, 6, 149, 119],
		[18, 75, 47, 31, 76, 48],
		[34, 54, 24, 34, 55, 25],
		[20, 45, 15, 61, 46, 16]
	], o.getRSBlocks = function(t, e) {
		var r = o.getRsBlockTable(t, e);
		if(void 0 == r) throw new Error("bad rs block @ typeNumber:" + t + "/errorCorrectLevel:" + e);
		for(var n = r.length / 3, i = [], a = 0; n > a; a++)
			for(var s = r[3 * a + 0], h = r[3 * a + 1], u = r[3 * a + 2], l = 0; s > l; l++) i.push(new o(h, u));
		return i
	}, o.getRsBlockTable = function(t, e) {
		switch(e) {
			case l.L:
				return o.RS_BLOCK_TABLE[4 * (t - 1) + 0];
			case l.M:
				return o.RS_BLOCK_TABLE[4 * (t - 1) + 1];
			case l.Q:
				return o.RS_BLOCK_TABLE[4 * (t - 1) + 2];
			case l.H:
				return o.RS_BLOCK_TABLE[4 * (t - 1) + 3];
			default:
				return void 0
		}
	}, n.prototype = {
		get: function(t) {
			var e = Math.floor(t / 8);
			return 1 == (this.buffer[e] >>> 7 - t % 8 & 1)
		},
		put: function(t, e) {
			for(var r = 0; e > r; r++) this.putBit(1 == (t >>> e - r - 1 & 1))
		},
		getLengthInBits: function() {
			return this.length
		},
		putBit: function(t) {
			var e = Math.floor(this.length / 8);
			this.buffer.length <= e && this.buffer.push(0), t && (this.buffer[e] |= 128 >>> this.length % 8), this.length++
		}
	};
	var p = [
			[17, 14, 11, 7],
			[32, 26, 20, 14],
			[53, 42, 32, 24],
			[78, 62, 46, 34],
			[106, 84, 60, 44],
			[134, 106, 74, 58],
			[154, 122, 86, 64],
			[192, 152, 108, 84],
			[230, 180, 130, 98],
			[271, 213, 151, 119],
			[321, 251, 177, 137],
			[367, 287, 203, 155],
			[425, 331, 241, 177],
			[458, 362, 258, 194],
			[520, 412, 292, 220],
			[586, 450, 322, 250],
			[644, 504, 364, 280],
			[718, 560, 394, 310],
			[792, 624, 442, 338],
			[858, 666, 482, 382],
			[929, 711, 509, 403],
			[1003, 779, 565, 439],
			[1091, 857, 611, 461],
			[1171, 911, 661, 511],
			[1273, 997, 715, 535],
			[1367, 1059, 751, 593],
			[1465, 1125, 805, 625],
			[1528, 1190, 868, 658],
			[1628, 1264, 908, 698],
			[1732, 1370, 982, 742],
			[1840, 1452, 1030, 790],
			[1952, 1538, 1112, 842],
			[2068, 1628, 1168, 898],
			[2188, 1722, 1228, 958],
			[2303, 1809, 1283, 983],
			[2431, 1911, 1351, 1051],
			[2563, 1989, 1423, 1093],
			[2699, 2099, 1499, 1139],
			[2809, 2213, 1579, 1219],
			[2953, 2331, 1663, 1273]
		],
		m = function() {
			var t = function(t, e) {
				this._el = t, this._htOption = e
			};
			return t.prototype.draw = function(t) {
				function e(t, e) {
					var r = document.createElementNS("http://www.w3.org/2000/svg", t);
					for(var o in e) e.hasOwnProperty(o) && r.setAttribute(o, e[o]);
					return r
				} {
					var r = this._htOption,
						o = this._el,
						n = t.getModuleCount();
					Math.floor(r.width / n), Math.floor(r.height / n)
				}
				this.clear();
				var i = e("svg", {
					viewBox: "0 0 " + String(n) + " " + String(n),
					width: "100%",
					height: "100%",
					fill: r.colorLight
				});
				i.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"), o.appendChild(i), i.appendChild(e("rect", {
					fill: r.colorDark,
					width: "1",
					height: "1",
					id: "template"
				}));
				for(var a = 0; n > a; a++)
					for(var s = 0; n > s; s++)
						if(t.isDark(a, s)) {
							var h = e("use", {
								x: String(a),
								y: String(s)
							});
							h.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template"), i.appendChild(h)
						}
			}, t.prototype.clear = function() {
				for(; this._el.hasChildNodes();) this._el.removeChild(this._el.lastChild)
			}, t
		}(),
		v = "svg" === document.documentElement.tagName.toLowerCase(),
		_ = v ? m : i() ? function() {
			function t() {
				this._elImage.src = this._elCanvas.toDataURL("image/png"), this._elImage.style.display = "block", this._elCanvas.style.display = "none"
			}

			function e(t, e) {
				var r = this;
				if(r._fFail = e, r._fSuccess = t, null === r._bSupportDataURI) {
					var o = document.createElement("img"),
						n = function() {
							r._bSupportDataURI = !1, r._fFail && _fFail.call(r)
						},
						i = function() {
							r._bSupportDataURI = !0, r._fSuccess && r._fSuccess.call(r)
						};
					return o.onabort = n, o.onerror = n, o.onload = i, o.src = "", void 0
				}
				r._bSupportDataURI === !0 && r._fSuccess ? r._fSuccess.call(r) : r._bSupportDataURI === !1 && r._fFail && r._fFail.call(r)
			}
			if(this._android && this._android <= 2.1) {
				var r = 1 / window.devicePixelRatio,
					o = CanvasRenderingContext2D.prototype.drawImage;
				CanvasRenderingContext2D.prototype.drawImage = function(t, e, n, i, a, s, h, u) {
					if("nodeName" in t && /img/i.test(t.nodeName))
						for(var l = arguments.length - 1; l >= 1; l--) arguments[l] = arguments[l] * r;
					else "undefined" == typeof u && (arguments[1] *= r, arguments[2] *= r, arguments[3] *= r, arguments[4] *= r);
					o.apply(this, arguments)
				}
			}
			var n = function(t, e) {
				this._bIsPainted = !1, this._android = a(), this._htOption = e, this._elCanvas = document.createElement("canvas"), this._elCanvas.width = e.width, this._elCanvas.height = e.height, t.appendChild(this._elCanvas), this._el = t, this._oContext = this._elCanvas.getContext("2d"), this._bIsPainted = !1, this._elImage = document.createElement("img"), this._elImage.alt = "Scan me!", this._elImage.style.display = "none", this._el.appendChild(this._elImage), this._bSupportDataURI = null
			};
			return n.prototype.draw = function(t) {
				var e = this._elImage,
					r = this._oContext,
					o = this._htOption,
					n = t.getModuleCount(),
					i = o.width / n,
					a = o.height / n,
					s = Math.round(i),
					h = Math.round(a);
				e.style.display = "none", this.clear();
				for(var u = 0; n > u; u++)
					for(var l = 0; n > l; l++) {
						var g = t.isDark(u, l),
							f = l * i,
							d = u * a;
						r.strokeStyle = g ? o.colorDark : o.colorLight, r.lineWidth = 1, r.fillStyle = g ? o.colorDark : o.colorLight, r.fillRect(f, d, i, a), r.strokeRect(Math.floor(f) + .5, Math.floor(d) + .5, s, h), r.strokeRect(Math.ceil(f) - .5, Math.ceil(d) - .5, s, h)
					}
				this._bIsPainted = !0
			}, n.prototype.makeImage = function() {
				this._bIsPainted && e.call(this, t)
			}, n.prototype.isPainted = function() {
				return this._bIsPainted
			}, n.prototype.clear = function() {
				this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height), this._bIsPainted = !1
			}, n.prototype.round = function(t) {
				return t ? Math.floor(1e3 * t) / 1e3 : t
			}, n
		}() : function() {
			var t = function(t, e) {
				this._el = t, this._htOption = e
			};
			return t.prototype.draw = function(t) {
				for(var e = this._htOption, r = this._el, o = t.getModuleCount(), n = Math.floor(e.width / o), i = Math.floor(e.height / o), a = ['<table style="border:0;border-collapse:collapse;">'], s = 0; o > s; s++) {
					a.push("<tr>");
					for(var h = 0; o > h; h++) a.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:' + n + "px;height:" + i + "px;background-color:" + (t.isDark(s, h) ? e.colorDark : e.colorLight) + ';"></td>');
					a.push("</tr>")
				}
				a.push("</table>"), r.innerHTML = a.join("");
				var u = r.childNodes[0],
					l = (e.width - u.offsetWidth) / 2,
					g = (e.height - u.offsetHeight) / 2;
				l > 0 && g > 0 && (u.style.margin = g + "px " + l + "px")
			}, t.prototype.clear = function() {
				this._el.innerHTML = ""
			}, t
		}();
	QRCode = function(t, e) {
		if(this._htOption = {
				width: 256,
				height: 256,
				typeNumber: 4,
				colorDark: "#000000",
				colorLight: "#ffffff",
				correctLevel: l.H
			}, "string" == typeof e && (e = {
				text: e
			}), e)
			for(var r in e) this._htOption[r] = e[r];
		"string" == typeof t && (t = document.getElementById(t)), this._android = a(), this._el = t, this._oQRCode = null, this._oDrawing = new _(this._el, this._htOption), this._htOption.text && this.makeCode(this._htOption.text)
	}, QRCode.prototype.makeCode = function(t) {
		this._oQRCode = new e(s(t, this._htOption.correctLevel), this._htOption.correctLevel), this._oQRCode.addData(t), this._oQRCode.make(), this._el.title = t, this._oDrawing.draw(this._oQRCode), this.makeImage()
	}, QRCode.prototype.makeImage = function() {
		"function" == typeof this._oDrawing.makeImage && (!this._android || this._android >= 3) && this._oDrawing.makeImage()
	}, QRCode.prototype.clear = function() {
		this._oDrawing.clear()
	}, QRCode.CorrectLevel = l
}();
var _ = _ || {};
$.extend(_, function() {
	var t = {
			debug: !1,
			eventPool: $({}),
			observe: function() {
				this.eventPool.bind.apply(this.eventPool, arguments)
			},
			fire: function() {
				this.eventPool.trigger.apply(this.eventPool, arguments)
			},
			stopObserving: function() {
				this.eventPool.unbind.apply(this.eventPool, arguments)
			}
		},
		e = {
			pointCuts: {},
			addAdvice: function(t, e, n, r) {
				void 0 === this.pointCuts[t] && (this.pointCuts[t] = {}), void 0 === this.pointCuts[t][e] && (this.pointCuts[t][e] = []), this.pointCuts[t][e].push({
					type: n,
					advice: r
				})
			},
			inject: function(t, e) {
				var n = this.pointCuts[t];
				if(n) {
					for(var r in n)
						for(var i, o = n[r]; i = o.shift();) $.aop[i.type]({
							target: e,
							method: r
						}, i.advice);
					this.clear(t)
				}
			},
			clear: function(t) {
				delete this.pointCuts[t]
			}
		},
		n = function(t) {
			t.hasOwnProperty("initial") && $.isFunction(t.initial) || (t.initial = new Function);
			var e = function(t) {
					var e = {
						noMethod: {},
						method: {}
					};
					for(var n in t) "prototype" != n && ($.isFunction(t[n]) ? e.method[n] = t[n] : e.noMethod[n] = $.isArray(t[n]) ? Array.prototype.slice.call(t[n], 0) : $.isPlainObject(t[n]) ? $.extend({}, t[n]) : t[n]);
					return e
				},
				r = function() {
					var n = e(t);
					$.extend(this, n.noMethod), r.prototype.initial && $.isFunction(r.prototype.initial) && r.prototype.initial.apply(this, arguments)
				};
			return r.extend = function(t) {
				var e = r.prototype,
					i = {};
				$.extend(i, e, t);
				var o = n(i);
				return $.extend(o.prototype, {
					__parent__: function(t) {
						var n = this;
						if(e.hasOwnProperty(t)) return $.isFunction(e[t]) ? function() {
							e[t].apply(n, arguments)
						} : e[t]
					},
					__super__: function() {
						return this.__parent__("initial").apply(this, arguments)
					}
				}), o
			}, $.extend(r.prototype, t, {
				prototype: r.prototype
			}), r
		},
		r = n({
			type: "",
			target: null,
			initial: function(t, e) {
				this.type = t, this.target = e
			}
		}),
		i = n({
			_eventStack: {},
			initial: function() {},
			bind: function(t, e, n) {
				this._eventStack.hasOwnProperty(t) || (this._eventStack[t] = []), this._eventStack[t].push({
					handler: e,
					context: n
				})
			},
			unbind: function(t, e) {
				if(this._eventStack.hasOwnProperty(t)) {
					if(!e || !$.isFunction(e)) return delete this._eventStack[t], void 0;
					for(var n = this._eventStack[t], r = 0, i = n.length; i > r; r++)
						if(n[r].handler == e) {
							n.splice(r, 1);
							break
						}
				}
			},
			trigger: function(t) {
				if(this._eventStack.hasOwnProperty(t) && this._eventStack[t].length) {
					var e = new r(t, this),
						n = Array.prototype.slice.call(arguments, 0),
						i = [];
					n.shift(), n = [e].concat(n), this._eventStack[t] && (i = Array.prototype.slice.call(this._eventStack[t]));
					for(var o = 0, a = i, s = i.length; s > o; o++)
						if(a && a[o]) {
							var u = a[o],
								l = u.handler,
								c = u.context || null;
							l && $.isFunction(l) && l.apply(c, n)
						}
				}
			},
			observe: function() {
				t.observe.apply(t, arguments)
			},
			stopObserving: function() {
				t.stopObserving.apply(t, arguments)
			},
			fire: function() {
				t.fire.apply(t, arguments)
			}
		}),
		o = {
			widget: ["widget"],
			pagelet: ["pagelet"]
		},
		a = {
			widget: ["widget"],
			pagelet: ["pagelet", "widget"]
		},
		s = {},
		u = /[^\/]*$/,
		l = function(t) {
			var e = function(e) {
				return t.apply(this, e)
			};
			return e.prototype = t.prototype,
				function() {
					return new e(arguments)
				}
		},
		c = {
			define: function(t) {
				if(t && t.hasOwnProperty("path") && t.hasOwnProperty("sub")) {
					var e = t.path,
						n = [],
						r = [],
						i = null,
						o = p.getModuleAttr(e);
					if(p.checkAndInitAlias(t), t.requires = p.convertPaths(t.requires, o), t.extend = p.convertAlias(t.extend, o), i = t.extend, r = t.requires, c._checkDeps(e, t), r && $.isArray(r) && r.length > 0)
						for(var a = 0, s = r.length; s > a; a++) n.push(p.getJsPath(r[a], o));
					i && "" != i && (i = p.getJsPath(i), n.push(i));
					var u = p.getJsPath(e);
					F.module(u, function(e, n) {
						var r = $.extend({}, t.sub);
						if(r.require = e, r.__attr = o, i) {
							var a = e(i);
							if(!a || !a.hasOwnProperty("cls")) throw new Error("@ModuleFactroy : Superclass is not defined!");
							n.cls = a.cls.extend(r)
						} else n.cls = p.extend(r)
					}, n)
				}
			},
			use: function(t, n, r, i) {
				var o = p.getModuleAttr(t);
				F.use(o.path, function(a) {
					var s, u, c, h;
					if(e.inject(t, a.cls), u = a.cls && l(a.cls) || null, c = $.isArray(n) ? n : [n], !u) throw new Error("class is undefined! - " + o.path);
					c[0] && c[0].loadCss === !0 && (h = p.getCssPath(t), F.loadCss(h)), s = u.apply(null, c), "widget" != o.type || "undefined" != typeof i && i === !1 || (window[o.scope] = window[o.scope] || {}, window[o.scope][o.module] = s), r && $.isFunction(r) && r.call(null, s)
				})
			},
			getInstance: function(t, e) {
				var n = p.getModuleAttr(t),
					r = (n.modulePath, c._checkGlobalInstance(t));
				r && "object" == typeof r ? e && $.isFunction(e) && e.call(null, r) : c.use(t, null, function(n) {
					n && "object" == typeof n && (c._addGlobalInstance(t, n), e && $.isFunction(e) && e.call(null, n))
				})
			},
			_checkGlobalInstance: function(t) {
				var e = p.getModuleAttr(t),
					n = e.modulePath;
				window.__moduleInstances__ || (window.__moduleInstances__ = {});
				var r = window.__moduleInstances__[n];
				return r ? r : null
			},
			_addGlobalInstance: function(t, e) {
				var n = c._checkGlobalInstance(t);
				if(n) return !1;
				var r = p.getModuleAttr(t),
					i = r.modulePath;
				return window.__moduleInstances__[i] = e, !0
			},
			_checkDeps: function(t, e) {
				var n = p.getModuleAttr(t);
				if(void 0 !== n.type) {
					if($.isArray(o[n.type]) && e.extend && "" != e.extend && $.inArray(p.getModuleAttr(e.extend).type, o[n.type]) < 0) throw new Error("@ModuleFactroy._checkDeps : Can not extends module! - " + t);
					if($.isArray(a[n.type]) && e.hasOwnProperty("requires") && $.isArray(e.requires))
						for(var r = 0, i = e.requires.length; i > r; r++) {
							var s = p.getModuleAttr(e.requires[r], n);
							if(s.module != n.module && $.inArray(s.type, a[n.type]) < 0) throw new Error("@ModuleFactroy._checkDeps : can not require module!")
						}
				}
			}
		},
		p = i.extend({
			__attr: {},
			initial: function() {},
			requireInstance: function(t, e) {
				if(t = p.convertAlias(t, this.__attr), this.__checkUse(t), !this.require || !$.isFunction(this.require)) throw new Error("@Module : this._require is not defined!");
				var n = p.getModuleAttr(t, this.__attr),
					r = n.path,
					i = this.require(r),
					o = l(i.cls),
					a = $.isArray(e) ? e : [e],
					s = o.apply(null, a);
				return s
			},
			use: function() {
				var t = arguments[0],
					e = Array.prototype.slice.call(arguments, 1);
				return this.requireInstance.apply(this, [t, e])
			},
			getInstance: function(t) {
				if(t = p.convertAlias(t, this.__attr), this.__checkUse(t), !this.require || !$.isFunction(this.require)) throw new Error("@Module : this._require is not defined!");
				var e = (p.getModuleAttr(t, this.__attr), c._checkGlobalInstance(t));
				return e && "object" == typeof e ? e : (e = this.requireInstance(t), c._addGlobalInstance(t, e), e)
			},
			requireInstanceAsync: function(t) {
				this.__checkUse(t), c.use.apply(null, arguments)
			},
			__checkUse: function(t) {
				if(t.indexOf("/") > 0) {
					var e = p.getModuleAttr(t);
					if((e.scope != this.__attr.scope || e.type != this.__attr.type || e.module != this.__attr.module) && $.inArray(e.type, a[this.__attr.type]) < 0) throw new Error("@Module : Can not use this Module!")
				}
			}
		});
	return p.checkAndInitAlias = function(t) {
		var e, n, r = t.path,
			i = r.match(u)[0];
		if(i !== r && "__alias" === i) {
			if(n = $.trim(r).split("/"), e = n[2], !t.sub.alias) throw new Error("@Module : __alias can not be used !");
			s[e] = t.sub.alias
		}
	}, p.convertPaths = function(t, e) {
		var n = [];
		if($.isArray(t)) return $.each(t, function(t, r) {
			n.push(p.convertAlias(r, e))
		}), n
	}, p.convertAlias = function(t, e) {
		var n, r;
		return e && t ? (n = e.module, r = s[n] || {}, r[t] && (t = r[t]), t) : t
	}, p.getModuleAttr = function(t, e) {
		var n, r, i, o, a, s, u, l, c = "",
			h = "/";
		if(n = t.replace(/\/$/, "").split("/"), u = n.length, 1 == u && e) o = t, a = e.module, r = e.type, i = e.scope;
		else if(3 === u || 4 === u) r = n[1].toLowerCase(), a = n[2], i = n[0], o = u > 3 ? n[3] : n[2];
		else {
			if(!(u > 4)) return !1;
			r = n[1].toLowerCase(), a = n[2], i = n[0];
			for(var d = 3; u - 1 > d; d++) c += n[d] + h;
			o = n[u - 1]
		}
		return o = p.nameToFile(o), s = (i + h + r + h + p.nameToFile(a) + h + c + o + ".js?class").toString(), l = (i + h + r + h + a + h + c + o).toString(), {
			scope: i,
			module: a,
			file: o,
			type: r,
			path: s,
			modulePath: l
		}
	}, p.nameToFile = function(t) {
		return t.replace(/([a-z])([A-Z])/g, function() {
			return arguments[1] + "_" + arguments[2]
		}).toLowerCase()
	}, p.getJsPath = function(t, e) {
		var n = p.getModuleAttr(t, e);
		return n.path
	}, p.getCssPath = function(t) {
		return "/tb/static-" + t.replace(/^(\w+\/\w+\/)(\w+).*/g, function() {
			if(arguments[1] && arguments[2]) {
				var t = p.nameToFile(arguments[2]);
				return arguments[1] + t + "/" + t + ".css"
			}
			return arguments[0]
		})
	}, {
		Module: {
			use: c.use,
			define: c.define,
			getInstance: c.getInstance
		},
		Class: n,
		Dispatcher: i,
		MessageManager: t,
		AopManager: e
	}
}());
(function() {
	"use strict";

	function Pagelet(e, t) {
		if("string" != typeof e) throw new TypeError("pagelet id must be a String.");
		"object" != typeof t && (t = {});
		var r;
		if(pagelets[e]) {
			if(r = pagelets[e], r.serverTimeStamp = t.stamp, r.state !== OUTDATED) throw new Error("pagelet[" + e + "] already loaded.")
		} else {
			if(r = this, r.id = e, r.children = {}, r.document = null, r.scripts = [], r.styles = [], r.eventManager = new EventManager(this), e === ROOT_PAGELET_ID) return r.state = LOADED, pagelets[e] = r, void 0;
			var n = t.parent;
			n || (n = ROOT_PAGELET_ID), r._parentId = n, r.state = INITIALIZED
		}
		return r.content = t.content, r.scripts = Utils.unique(r.scripts.concat(t.scripts || [])), r.styles = Utils.unique(r.styles.concat(t.styles || [])), r.scriptResourceManager = new ResourceManager(scriptLoader), r.styleResourceManager = new ResourceManager(styleLoader), r.promise = r._init(), pagelets[e] = r, r
	}
	var debug = !1,
		Utils = {};
	Utils.loadScript = function(e) {
		return new Promise(function(t) {
			var r = document.createElement("script");
			r.src = e, r.onload = function() {
				debug && console.log("script [" + e + "] loaded"), t()
			};
			var n = document.head || document.getElementsByTagName("head")[0];
			n.appendChild(r)
		})
	}, Utils.loadStyle = function(e) {
		return new Promise(function(t) {
			var r = document.createElement("link");
			r.rel = "stylesheet", r.href = e, r.onload = function() {
				debug && console.log("stylesheet [" + e + "] loaded"), t()
			};
			var n = document.head || document.getElementsByTagName("head")[0];
			n.appendChild(r)
		})
	}, Utils.traversePagelet = function(e, t) {
		t(e);
		for(var r in e.children) Utils.traversePagelet(e.children[r], t)
	}, Utils.unique = function(e) {
		if(!(e instanceof Array)) throw new TypeError(e + " is not an array");
		for(var t = [], r = {}, n = 0, i = e.length; i > n; n++) {
			var o = e[n];
			if("string" != typeof o) throw new TypeError("array item " + o + " is not a string");
			r[o] || (t.push(o), r[o] = !0)
		}
		return t
	}, Utils.filter = function(e, t) {
		for(var r = [], n = 0, i = e.length; i > n; n++) {
			var o = e[n];
			t(o, n) && r.push(o)
		}
		return r
	}, Utils.each = function(e, t) {
		for(var r = 0, n = e.length; n > r; r++) {
			var i = e[r];
			t(i, r)
		}
		return e
	};
	var EventManager = function(e) {
		this.context = e, this._eventPool = {}
	};
	EventManager.prototype = {
		addEventListener: function(e, t) {
			var r = this._getEventObject(e);
			return this._eventPool[r.name] || (this._eventPool[r.name] = {}), this._eventPool[r.name][r.namespace] || (this._eventPool[r.name][r.namespace] = []), this._eventPool[r.name][r.namespace].push(t), this
		},
		dispatchEvent: function(e, t, r) {
			var n = this._getHandlersByEventName(e);
			if(n)
				for(var i = 0, o = n.length; o > i; i++) n[i].call(r || this.context, t)
		},
		removeEventListener: function(e, t) {
			var r = this._getEventObject(e);
			if(this._eventPool[r.name] && this._eventPool[r.name][r.namespace])
				if("function" == typeof t)
					for(var n, i = this._eventPool[r.name][r.namespace]; - 1 != (n = i.indexOf(t));) i.splice(n, 1);
				else delete this._eventPool[r.name][r.namespace];
			return this
		},
		_getEventObject: function(e) {
			var t = e.split(".");
			return {
				name: t[0],
				namespace: t[1] || "__default"
			}
		},
		_getHandlersByEventName: function(e) {
			var t = this._getEventObject(e);
			return this._eventPool[t.name] ? this._eventPool[t.name][t.namespace] : []
		}
	};
	var styleLoader = {
		_loaders: {}
	};
	styleLoader._getUrl = function(e) {
		return e
	}, styleLoader.load = function(e) {
		e instanceof Array || (e = [e]);
		for(var t = this._getUrl(e), r = [], n = function(e) {
				var t = styleLoader._loaders[e] || Utils.loadStyle(e);
				styleLoader._loaders[e] = t, r.push(t)
			}, i = 0, o = t.length; o > i; i++) {
			var a = t[i];
			n(a)
		}
		return Promise.all(r)
	}, styleLoader.config = function(e) {
		"object" == typeof e && "function" == typeof e.urlsGenerator && (styleLoader._getUrl = e.urlsGenerator)
	};
	var scriptLoader = {
		_loaders: {}
	};
	scriptLoader._getUrl = function(e) {
		return e
	}, scriptLoader.load = function(e) {
		e instanceof Array || (e = [e]);
		for(var t = this._getUrl(e), r = [], n = function(e) {
				var t = scriptLoader._loaders[e] || Utils.loadScript(e);
				scriptLoader._loaders[e] = t, r.push(t)
			}, i = 0, o = t.length; o > i; i++) {
			var a = t[i];
			n(a)
		}
		return Promise.all(r)
	}, scriptLoader.config = function(e) {
		"object" == typeof e && "function" == typeof e.urlsGenerator && (scriptLoader._getUrl = e.urlsGenerator)
	};
	var ResourceManager = function(e) {
		var t = this;
		t.resourceLoader = e, t.resources = [], t.resourcesLocal = [], t.resourcesComboed = []
	};
	ResourceManager.COMBO_SIZE = 25, ResourceManager.resourceComboMap = {}, ResourceManager.resourcePool = {}, ResourceManager.combo = function(e, t) {
		e = e.concat();
		var r = [];
		for(t = t || ResourceManager.COMBO_SIZE; e.length > 0;) r.push(e.splice(0, t).join(","));
		return r
	}, ResourceManager.prototype.load = function(e) {
		return this._registerResources(e), e.length > 0 ? this.resourceLoader.load(this.resourcesComboed) : Promise.resolve()
	}, ResourceManager.prototype._registerResources = function(e) {
		var t = this,
			r = [],
			n = [];
		r = Utils.filter(e, function(e) {
			var t = ResourceManager.resourceComboMap[e];
			return t ? (-1 === n.indexOf(t) && n.push(t), !1) : !0
		});
		var i = ResourceManager.combo(r, ResourceManager.COMBO_SIZE);
		Utils.each(r, function(e, t) {
			var r = Math.floor(t / ResourceManager.COMBO_SIZE);
			ResourceManager.resourceComboMap[e] = i[r]
		}), n = n.concat(i), t.resourcesLocal = t.resourcesLocal.concat(r), t.resourcesComboed = t.resourcesComboed.concat(n)
	}, ResourceManager.config = function(e) {
		"number" == typeof e.COMBO_SIZE && (ResourceManager.COMBO_SIZE = e.COMBO_SIZE)
	};
	var pagelets = {},
		orphanPagelets = {},
		ROOT_PAGELET_ID = "__root",
		INITIALIZED = 0,
		LOADED = 1,
		OUTDATED = -1,
		checkTimeStamp = !0;
	Pagelet.prototype = {
		_init: function() {
			var e = this.styleResourceManager.load(this.styles),
				t = this.scriptResourceManager.load(this.scripts),
				r = new Promise(function(t) {
					this.resolveMounter = t, e.then(function() {
						var e = this._parentId;
						pagelets[e] && pagelets[e].state >= LOADED ? this.mount() : orphanPagelets[e] ? orphanPagelets[e].push(this) : orphanPagelets[e] = [this], Bigpipe.dispatchEvent("beforepageletload", this), Bigpipe.dispatchEvent("pageletstyleloaded", this)
					}.bind(this))
				}.bind(this));
			return Promise.all([r, t]).then(function() {
				Bigpipe.dispatchEvent("pageletscriptloaded", this)
			}.bind(this))
		},
		_setParent: function(e) {
			return this.parent = pagelets[e], this.parent.children[this.id] = this, this
		},
		_getPlaceholder: function(e) {
			return e.getElementById || (e = window.document), e.getElementById("pagelet_" + this.id)
		},
		_getHTML: function() {
			if("undefined" != typeof this.content) return this.content;
			var e = document.getElementById("pagelet_html_" + this.id);
			if(!e) return !1;
			var t = e.innerHTML.trim().match(/^<!--([\s\S]*)-->$/);
			return t ? t[1] : ""
		},
		mount: function() {
			if(this.timeStamp === this.serverTimeStamp || !checkTimeStamp) {
				try {
					this.broadcast("destroy")
				} catch(e) {
					console.log(e)
				}
				Utils.traversePagelet(this, function(e) {
					delete pagelets[e.id]
				}), this.children = {}, pagelets[this.id] = this, this.eventManager = new EventManager(this)
			}
			if(this._setParent(this._parentId), this._appendTo(this.parent), orphanPagelets[this.id])
				for(var t = orphanPagelets[this.id], r = t.length - 1; r >= 0; r--) t[r].mount();
			return this.state = LOADED, delete this.timeStamp, this.resolveMounter(), delete this.resolveMounter, this
		},
		_appendTo: function(e) {
			if(!(e instanceof Pagelet)) throw new TypeError(e + "is not a pagelet.");
			if(this.state >= LOADED) throw new Error("pagelet[" + this.id + "] is already mounted");
			var t = this._getHTML();
			if(t !== !1) {
				if(!e.document) throw new Error("Cannot append pagelet[" + this.id + "] to documentless pagelet[" + e.id + "]");
				if(this.document = this._getPlaceholder(e.document), !this.document) throw new Error("Cannot find the placeholder for pagelet[" + this.id + "]");
				this.document.innerHTML = t;
				var r = document.getElementById("pagelet_html_" + this.id);
				r && r.parentNode.removeChild(r)
			}
			return this
		},
		remove: function() {
			this.broadcast("destroy"), this.document.innerHTML = ""
		},
		replaceWith: function() {},
		refresh: function(options) {
			"object" != typeof options && (options = {}), this.broadcast("beforerefresh");
			var timeStamp = (new Date).getTime();
			Utils.traversePagelet(this, function(e) {
				delete orphanPagelets[e.id], e.state = OUTDATED, e.timeStamp = timeStamp
			});
			var url;
			url = "string" == typeof options.url ? options.url : "function" == typeof options.url ? options.url(window.location.href) : window.location.href;
			var pageletId = this.id;
			return url = URI(url).addQuery("pagelets", pageletId).addQuery("pagelets_stamp", timeStamp).toString(), new Promise(function(resolve) {
				var xhr = new XMLHttpRequest;
				xhr.onload = function() {
					var results = [],
						dom = document.createElement("div");
					dom.innerHTML = xhr.responseText;
					for(var i = 0, length = dom.childNodes.length; length > i; i++) {
						var el = dom.childNodes[i];
						null === el.nodeName || "SCRIPT" !== el.nodeName.toUpperCase() || el.src || results.push(eval(el.innerHTML))
					}
					Promise.all(results).then(resolve)["catch"](function(e) {
						console.log(e)
					})
				}, xhr.open("GET", url, !0), xhr.send()
			})
		},
		on: function(e, t) {
			return this.eventManager.addEventListener(e, t), this
		},
		off: function(e, t) {
			return this.eventManager.removeEventListener(e, t), this
		},
		emit: function(e, t) {
			return this.eventManager.dispatchEvent(e, t), this.parent && this.parent.emit(e, t), this
		},
		broadcast: function(e, t) {
			if(this.eventManager.dispatchEvent(e, t), this.children)
				for(var r in this.children) this.children[r].broadcast(e, t);
			return this
		}
	};
	var __rootPagelet = new Pagelet(ROOT_PAGELET_ID);
	__rootPagelet.document = document;
	var Bigpipe = {},
		_bigpipeEventManager = new EventManager(Bigpipe);
	Bigpipe.broadcast = function(e, t) {
		return __rootPagelet.broadcast(e, t), this
	}, Bigpipe.addEventListener = function(e, t) {
		return _bigpipeEventManager.addEventListener(e, t), this
	}, Bigpipe.removeEventListener = function(e, t) {
		return _bigpipeEventManager.removeEventListener(e, t), this
	}, Bigpipe.dispatchEvent = function(e, t) {
		return _bigpipeEventManager.dispatchEvent(e, t), this
	}, Bigpipe.register = function(e, t) {
		try {
			var r = new Pagelet(e, t);
			return r.promise.then(function() {
				return r
			})
		} catch(n) {
			throw console.warn(n), n
		}
	}, Bigpipe.end = function() {
		var e = [];
		for(var t in pagelets) e.push(pagelets[t].promise);
		Promise.all(e).then(function() {
			Bigpipe.dispatchEvent("pageloaded", pagelets)
		})
	}, Bigpipe.config = function(e) {
		"function" == typeof e.getHTML && (Pagelet.prototype._getHTML = e.getHTML), "function" == typeof e.getPlaceholder && (Pagelet.prototype._getPlaceholder = e.getPlaceholder), "function" == typeof e.getStylesUrl && styleLoader.config({
			urlsGenerator: e.getStylesUrl
		}), "function" == typeof e.getScriptsUrl && scriptLoader.config({
			urlsGenerator: e.getScriptsUrl
		}), "function" == typeof e.ResourceManager && (ResourceManager = e.ResourceManager), e.ignoreTimeStamp === !0 && (checkTimeStamp = !1)
	}, Bigpipe.debug = function(e) {
		e === !0 ? (debug = !0, Bigpipe.Pagelet = Pagelet, Bigpipe.pagelets = pagelets, Bigpipe.orphanPagelets = orphanPagelets, Bigpipe.styleLoader = styleLoader, Bigpipe.scriptLoader = scriptLoader, Bigpipe.ResourceManager = ResourceManager, Bigpipe.Utils = Utils, Bigpipe._bigpipeEventManager = _bigpipeEventManager) : (debug = !1, delete Bigpipe.Pagelet, delete Bigpipe.pagelets, delete Bigpipe.orphanPagelets, delete Bigpipe.styleLoader, delete Bigpipe.scriptLoader, delete Bigpipe.ResourceManager, delete Bigpipe.Utils, delete Bigpipe._eventHandlers)
	};
	var global = this;
	global.Bigpipe = Bigpipe
}).call(this);
! function() {
	"use strict";

	function t(t) {
		////forum.dfer.top/
for(var i = [], n = t.length - 1; n >= 0; n--) i.unshift("//forum.dfer.top/?f=" + t[n]);
		return i
	}
	Bigpipe.config({
		getStylesUrl: t,
		getScriptsUrl: t
	})
}();
! function(t) {
	"use strict";
	var i = function(t, i, r) {
			t && "object" == typeof t && (i = t.high, r = t.unsigned, t = t.low), this.low = 0 | t, this.high = 0 | i, this.unsigned = !!r
		},
		r = {},
		e = {};
	i.fromInt = function(t, n) {
		var o, s;
		return n ? (t >>>= 0, t >= 0 && 256 > t && (s = e[t]) ? s : (o = new i(t, 0 > (0 | t) ? -1 : 0, !0), t >= 0 && 256 > t && (e[t] = o), o)) : (t = 0 | t, t >= -128 && 128 > t && (s = r[t]) ? s : (o = new i(t, 0 > t ? -1 : 0, !1), t >= -128 && 128 > t && (r[t] = o), o))
	}, i.fromNumber = function(t, r) {
		return r = !!r, isNaN(t) || !isFinite(t) ? i.ZERO : !r && -h >= t ? i.MIN_SIGNED_VALUE : r && 0 >= t ? i.MIN_UNSIGNED_VALUE : !r && t + 1 >= h ? i.MAX_SIGNED_VALUE : r && t >= s ? i.MAX_UNSIGNED_VALUE : 0 > t ? i.fromNumber(-t, !1).negate() : new i(t % o | 0, t / o | 0, r)
	}, i.fromBits = function(t, r, e) {
		return new i(t, r, e)
	}, i.from28Bits = function(t, r, e, n) {
		return i.fromBits(t | r << 28, r >>> 4 | e << 24, n)
	}, i.fromString = function(t, r, e) {
		if(0 == t.length) throw new Error("number format error: empty string");
		if("NaN" === t || "Infinity" === t || "+Infinity" === t || "-Infinity" === t) return i.ZERO;
		if("number" == typeof r && (e = r, r = !1), e = e || 10, 2 > e || e > 36) throw new Error("radix out of range: " + e);
		if("-" == t.charAt(0)) return i.fromString(t.substring(1), r, e).negate();
		if(t.indexOf("-") >= 0) throw new Error('number format error: interior "-" character: ' + t);
		for(var n = i.fromNumber(Math.pow(e, 8)), o = i.ZERO, s = 0; s < t.length; s += 8) {
			var h = Math.min(8, t.length - s),
				u = parseInt(t.substring(s, s + h), e);
			if(8 > h) {
				var f = i.fromNumber(Math.pow(e, h));
				o = o.multiply(f).add(i.fromNumber(u))
			} else o = o.multiply(n), o = o.add(i.fromNumber(u))
		}
		return o.unsigned = r, o
	};
	var n = 65536,
		o = n * n,
		s = o * o,
		h = s / 2,
		u = i.fromInt(1 << 24);
	i.ZERO = i.fromInt(0), i.UZERO = i.fromInt(0, !0), i.ONE = i.fromInt(1), i.UONE = i.fromInt(1, !0), i.NEG_ONE = i.fromInt(-1), i.MAX_SIGNED_VALUE = i.fromBits(-1, 2147483647, !1), i.MAX_UNSIGNED_VALUE = i.fromBits(-1, -1, !0), i.MAX_VALUE = i.MAX_SIGNED_VALUE, i.MIN_SIGNED_VALUE = i.fromBits(0, -2147483648, !1), i.MIN_UNSIGNED_VALUE = i.fromBits(0, 0, !0), i.MIN_VALUE = i.MIN_SIGNED_VALUE, i.prototype.toInt = function() {
		return this.unsigned ? this.low >>> 0 : this.low
	}, i.prototype.toNumber = function() {
		return this.unsigned ? (this.high >>> 0) * o + (this.low >>> 0) : this.high * o + (this.low >>> 0)
	}, i.prototype.toString = function(t) {
		if(t = t || 10, 2 > t || t > 36) throw new Error("radix out of range: " + t);
		if(this.isZero()) return "0";
		var r;
		if(this.isNegative()) {
			if(this.equals(i.MIN_SIGNED_VALUE)) {
				var e = i.fromNumber(t),
					n = this.div(e);
				return r = n.multiply(e).subtract(this), n.toString(t) + r.toInt().toString(t)
			}
			return "-" + this.negate().toString(t)
		}
		var o = i.fromNumber(Math.pow(t, 6));
		r = this;
		for(var s = "";;) {
			var h = r.div(o),
				u = r.subtract(h.multiply(o)).toInt(),
				f = u.toString(t);
			if(r = h, r.isZero()) return f + s;
			for(; f.length < 6;) f = "0" + f;
			s = "" + f + s
		}
	}, i.prototype.getHighBits = function() {
		return this.high
	}, i.prototype.getHighBitsUnsigned = function() {
		return this.high >>> 0
	}, i.prototype.getLowBits = function() {
		return this.low
	}, i.prototype.getLowBitsUnsigned = function() {
		return this.low >>> 0
	}, i.prototype.getNumBitsAbs = function() {
		if(this.isNegative()) return this.equals(i.MIN_SIGNED_VALUE) ? 64 : this.negate().getNumBitsAbs();
		for(var t = 0 != this.high ? this.high : this.low, r = 31; r > 0 && 0 == (t & 1 << r); r--);
		return 0 != this.high ? r + 33 : r + 1
	}, i.prototype.isZero = function() {
		return 0 == this.high && 0 == this.low
	}, i.prototype.isNegative = function() {
		return !this.unsigned && this.high < 0
	}, i.prototype.isOdd = function() {
		return 1 == (1 & this.low)
	}, i.prototype.isEven = function() {
		return 0 == (1 & this.low)
	}, i.prototype.equals = function(t) {
		return this.unsigned != t.unsigned && this.high >>> 31 != t.high >>> 31 ? !1 : this.high == t.high && this.low == t.low
	}, i.prototype.notEquals = function(t) {
		return !this.equals(t)
	}, i.prototype.lessThan = function(t) {
		return this.compare(t) < 0
	}, i.prototype.lessThanOrEqual = function(t) {
		return this.compare(t) <= 0
	}, i.prototype.greaterThan = function(t) {
		return this.compare(t) > 0
	}, i.prototype.greaterThanOrEqual = function(t) {
		return this.compare(t) >= 0
	}, i.prototype.compare = function(t) {
		if(this.equals(t)) return 0;
		var i = this.isNegative(),
			r = t.isNegative();
		return i && !r ? -1 : !i && r ? 1 : this.unsigned ? t.high >>> 0 > this.high >>> 0 || t.high == this.high && t.low >>> 0 > this.low >>> 0 ? -1 : 1 : this.subtract(t).isNegative() ? -1 : 1
	}, i.prototype.negate = function() {
		return !this.unsigned && this.equals(i.MIN_SIGNED_VALUE) ? i.MIN_SIGNED_VALUE : this.not().add(i.ONE)
	}, i.prototype.add = function(t) {
		var r = this.high >>> 16,
			e = 65535 & this.high,
			n = this.low >>> 16,
			o = 65535 & this.low,
			s = t.high >>> 16,
			h = 65535 & t.high,
			u = t.low >>> 16,
			f = 65535 & t.low,
			g = 0,
			a = 0,
			p = 0,
			l = 0;
		return l += o + f, p += l >>> 16, l &= 65535, p += n + u, a += p >>> 16, p &= 65535, a += e + h, g += a >>> 16, a &= 65535, g += r + s, g &= 65535, i.fromBits(p << 16 | l, g << 16 | a, this.unsigned)
	}, i.prototype.subtract = function(t) {
		return this.add(t.negate())
	}, i.prototype.multiply = function(t) {
		if(this.isZero()) return i.ZERO;
		if(t.isZero()) return i.ZERO;
		if(this.equals(i.MIN_VALUE)) return t.isOdd() ? i.MIN_VALUE : i.ZERO;
		if(t.equals(i.MIN_VALUE)) return this.isOdd() ? i.MIN_VALUE : i.ZERO;
		if(this.isNegative()) return t.isNegative() ? this.negate().multiply(t.negate()) : this.negate().multiply(t).negate();
		if(t.isNegative()) return this.multiply(t.negate()).negate();
		if(this.lessThan(u) && t.lessThan(u)) return i.fromNumber(this.toNumber() * t.toNumber(), this.unsigned);
		var r = this.high >>> 16,
			e = 65535 & this.high,
			n = this.low >>> 16,
			o = 65535 & this.low,
			s = t.high >>> 16,
			h = 65535 & t.high,
			f = t.low >>> 16,
			g = 65535 & t.low,
			a = 0,
			p = 0,
			l = 0,
			N = 0;
		return N += o * g, l += N >>> 16, N &= 65535, l += n * g, p += l >>> 16, l &= 65535, l += o * f, p += l >>> 16, l &= 65535, p += e * g, a += p >>> 16, p &= 65535, p += n * f, a += p >>> 16, p &= 65535, p += o * h, a += p >>> 16, p &= 65535, a += r * g + e * f + n * h + o * s, a &= 65535, i.fromBits(l << 16 | N, a << 16 | p, this.unsigned)
	}, i.prototype.div = function(t) {
		if(t.isZero()) throw new Error("division by zero");
		if(this.isZero()) return this.unsigned ? i.UZERO : i.ZERO;
		var r, e, n;
		if(this.equals(i.MIN_SIGNED_VALUE)) {
			if(t.equals(i.ONE) || t.equals(i.NEG_ONE)) return i.MIN_SIGNED_VALUE;
			if(t.equals(i.MIN_SIGNED_VALUE)) return i.ONE;
			var o = this.shiftRight(1);
			return r = o.div(t).shiftLeft(1), r.equals(i.ZERO) ? t.isNegative() ? i.ONE : i.NEG_ONE : (e = this.subtract(t.multiply(r)), n = r.add(e.div(t)))
		}
		if(t.equals(i.MIN_SIGNED_VALUE)) return this.unsigned ? i.UZERO : i.ZERO;
		if(this.isNegative()) return t.isNegative() ? this.negate().div(t.negate()) : this.negate().div(t).negate();
		if(t.isNegative()) return this.div(t.negate()).negate();
		for(n = i.ZERO, e = this; e.greaterThanOrEqual(t);) {
			r = Math.max(1, Math.floor(e.toNumber() / t.toNumber()));
			for(var s = Math.ceil(Math.log(r) / Math.LN2), h = 48 >= s ? 1 : Math.pow(2, s - 48), u = i.fromNumber(r, this.unsigned), f = u.multiply(t); f.isNegative() || f.greaterThan(e);) r -= h, u = i.fromNumber(r, this.unsigned), f = u.multiply(t);
			u.isZero() && (u = i.ONE), n = n.add(u), e = e.subtract(f)
		}
		return n
	}, i.prototype.modulo = function(t) {
		return this.subtract(this.div(t).multiply(t))
	}, i.prototype.not = function() {
		return i.fromBits(~this.low, ~this.high, this.unsigned)
	}, i.prototype.and = function(t) {
		return i.fromBits(this.low & t.low, this.high & t.high, this.unsigned)
	}, i.prototype.or = function(t) {
		return i.fromBits(this.low | t.low, this.high | t.high, this.unsigned)
	}, i.prototype.xor = function(t) {
		return i.fromBits(this.low ^ t.low, this.high ^ t.high, this.unsigned)
	}, i.prototype.shiftLeft = function(t) {
		if(t &= 63, 0 == t) return this;
		var r = this.low;
		if(32 > t) {
			var e = this.high;
			return i.fromBits(r << t, e << t | r >>> 32 - t, this.unsigned)
		}
		return i.fromBits(0, r << t - 32, this.unsigned)
	}, i.prototype.shiftRight = function(t) {
		if(t &= 63, 0 == t) return this;
		var r = this.high;
		if(32 > t) {
			var e = this.low;
			return i.fromBits(e >>> t | r << 32 - t, r >> t, this.unsigned)
		}
		return i.fromBits(r >> t - 32, r >= 0 ? 0 : -1, this.unsigned)
	}, i.prototype.shiftRightUnsigned = function(t) {
		if(t &= 63, 0 == t) return this;
		var r = this.high;
		if(32 > t) {
			var e = this.low;
			return i.fromBits(e >>> t | r << 32 - t, r >>> t, this.unsigned)
		}
		return 32 == t ? i.fromBits(r, 0, this.unsigned) : i.fromBits(r >>> t - 32, 0, this.unsigned)
	}, i.prototype.toSigned = function() {
		var t = this.clone();
		return t.unsigned = !1, t
	}, i.prototype.toUnsigned = function() {
		var t = this.clone();
		return t.unsigned = !0, t
	}, i.prototype.clone = function() {
		return new i(this.low, this.high, this.unsigned)
	}, "undefined" != typeof module && module.exports ? module.exports = i : "undefined" != typeof define && define.amd ? define("Math/Long", [], function() {
		return i
	}) : (t.dcodeIO || (t.dcodeIO = {}), t.dcodeIO.Long = i)
}(this);
$.lcsFlash = function(e) {
	var n = function() {
			return {
				log: function() {
					if($.cookie("lcs_debug") && "console" in window) {
						var e = !$.browser.msie || parseInt($.browser.version[0]) > 8;
						if(e) console.log.apply(console, arguments);
						else
							for(var n = 0; n < arguments.length; ++n) console.log($.json.encode(arguments[n]))
					}
				},
				error: function() {
					if($.cookie("lcs_debug") && "console" in window) {
						var e = !$.browser.msie || parseInt($.browser.version[0]) > 8;
						if(e) console.error.apply(console, arguments);
						else {
							console.error("---------begin-------");
							for(var n = 0; n < arguments.length; ++n) console.error(arguments[n], $.json.encode(arguments[n]));
							console.error("--------end--------")
						}
					}
				}
			}
		}(),
		o = function() {
			function o() {
				r(), c = window.setInterval(function() {
					$.isEmptyObject(d) && r(), n.log("[\u8f6e\u8be2]\u6b63\u5728\u68c0\u67e5\u5df2\u53d1\u9001\u961f\u5217\uff0c\u5f53\u524d\u957f\u5ea6\u4e3a", Object.keys(d).length), $.each(d, function(e, o) {
						o.timeout > 0 && (new Date).getTime() - o.sendTime > o.timeout && (o.retry ? (n.log("\u6709\u4e00\u6761\u6d88\u606f\u5df2\u8d85\u65f6\uff0c\u51c6\u5907\u91cd\u8bd5", o), o.retry = !1, i(o)) : (n.error("\u6709\u4e00\u6761\u6d88\u606f\u5df2\u8d85\u65f6\uff0c\u672a\u8bbe\u7f6e\u6216\u5df2\u7ecf\u91cd\u8bd5\uff0c\u51c6\u5907\u8c03\u7528error\u65b9\u6cd5", o), o.error(o), o.complete(o)), delete d[e])
					})
				}, 3e3)
			}

			function r() {
				window.clearInterval(c)
			}

			function i(e) {
				var r = $.extend({}, u, e);
				r.data64 = t.encode(r), r.sendTime = (new Date).getTime(), r.cid = r.sendTime, r.beforeSend(r), n.log("call LCSAS.send", r), t.send(r), d[r.cid] = r, o()
			}
			var c, s = /\s+/g,
				a = function() {},
				u = {
					command: 0,
					data: {},
					contentType: "pb",
					dataType: "pb",
					timeout: 6e3,
					retry: !1,
					beforeSend: a,
					success: a,
					error: a,
					complete: a
				},
				d = {},
				f = {},
				l = [],
				p = {},
				m = !1;
			return p.connect = function(n) {
				m || (m = !0, t.connect(_.extend({}, e, {
					tabInfo: n
				})))
			}, p.disconnect = function() {
				t.disconnect()
			}, p.send = function(e, n, o, t, r, c) {
				if("object" == typeof e) return i(e), this;
				if("number" != typeof e) throw new TypeError("\u9519\u8bef\u7684\u547d\u4ee4\u53f7");
				return "object" == typeof n && "function" != typeof o ? (r = t, t = o, o = void 0) : "function" == typeof n && (r = t, t = o, o = n, n = void 0), i({
					command: e,
					data: n,
					success: o,
					contentType: t,
					dataType: r,
					error: c || void 0
				}), this
			}, p.on = function(e, o) {
				if(!$.isFunction(o)) return n.error("on\u65b9\u6cd5\u5fc5\u987b\u63d0\u4f9b\u56de\u8c03\u65b9\u6cd5"), this;
				if("number" == typeof e) e = [e];
				else if("string" == typeof e) e = e.split(s);
				else if(!$.isArray(e)) return n.error("\u4e0d\u80fd\u8bc6\u522b\u7684\u547d\u4ee4\u53f7"), this;
				return $.each(e, function(e, n) {
					f[n] ? f[n].push(o) : f[n] = [o]
				}), this
			}, p.off = function(e, n) {
				if("number" == typeof e) e = [e];
				else if("string" == typeof e) e = e.split(s);
				else if(!$.isArray(e)) return this;
				return "undefined" == typeof n ? $.each(e, function(e, n) {
					f[+n] = []
				}) : $.isFunction(n) && $.each(e, function(e, o) {
					var t = f[+o];
					if(t) {
						var r = t.indexOf(n);
						r > -1 && t.splice(r, 1)
					}
				}), this
			}, p.onOpen = function(e) {
				return l.push(e), this
			}, p.isWebSocketInCurrentTab = function() {
				return t.isWebSocketInCurrentTab()
			}, p.onmessage = function(e) {
				e.data = t.decode(e);
				var o = d[e.cid],
					r = f[e.command];
				return o || r ? (o && (n.log("\u5df2\u627e\u5230\u6d88\u606f\u53d1\u9001\u8005"), o.response = e.data, o.success(e.data, o), o.complete(e.data, o), delete d[e.cid]), r && (n.log("\u5df2\u627e\u5230\u6d88\u606f\u76d1\u542c\u8005\uff0c\u5c06\u4f9d\u6b21\u6267\u884c\u56de\u8c03"), $.each(r, function(n, o) {
					o(e.data, e)
				})), void 0) : (n.log("\u65e2\u4e0d\u662f\u6d88\u606f\u8fd4\u56de(\u6216\u8005\u8fd4\u56de\u5df2\u8d85\u65f6)\uff0c\u53c8\u6ca1\u4eba\u642d\u7406", e), void 0)
			}, p.openCallback = function() {
				$.each(l, function(e, o) {
					n.log("[lcs] call open callback: ", o), o()
				})
			}, p
		}(),
		t = function() {
			function e(e, n, o, t) {
				var i = {};
				return i = "object" == typeof e ? $.extend({}, r, e) : $.extend({}, r, {
					host: e,
					Appid: n,
					Appkey: o,
					Cuid: t
				}), $.each(["Appid", "Appkey", "Cuid", "host"], function(e, n) {
					if(!i[n]) throw new TypeError("\u9700\u8981\u8bbe\u5b9a" + n)
				}), i
			}
			var t = function() {},
				r = {
					host: "",
					Cuid: "",
					Appid: "",
					Appkey: "",
					DeviceType: "21",
					ExtensionVersion: "2.2",
					LCSHeaderVersion: "1",
					callTarget: "STQ",
					timeout: 2e4,
					retry: 1,
					onopen: t,
					onclose: t,
					onerror: t
				};
			window.STQ = {
				onmessage: function(e) {
					n.log("[onmessage]", e), o.onmessage(e)
				},
				log: function() {
					n.log("[flash]", arguments)
				},
				alert: function() {},
				onerror: function() {
					n.log("[onerror]", arguments)
				},
				onclose: function() {
					n.log("[onclose]", arguments)
				},
				onopen: function() {
					n.log("[onopen]", arguments), o.openCallback()
				},
				login: function(e) {
					n.log("[JS\u6ce8\u518c]", e), $.post("/connectmanager/user/updateFlashInfo", e)
				},
				getLongId: function() {
					var e = $.cookie("LONGID");
					return null == e ? "" : e
				},
				setLongId: function(e) {
					$.cookie("LONGID", e, {
						path: "/"
					})
				}
			};
			var i = null;
			return {
				send: function(e) {
					n.log("LCSAS.send", e), i.remote("sendMessage", e)
				},
				connect: function() {
					var n = e.apply(this, arguments),
						o = $("<div id='lcsas-container'>");
					o.css({
						position: "fixed",
						top: 0
					}), $("body").append(o);
					var t = "//tb2.bdstatic.com/tb/img/LCSAS_b80db27.swf",
						r = {
							id: "LCSAS",
							container: "#lcsas-container",
							width: 1,
							height: 1,
							vars: n
						};
					i = new $.swf(t, r)
				},
				encode: function(e) {
					return i.remote("encode", e.command, e.data)
				},
				decode: function(e) {
					return i.remote("decode", e.command, e.data64)
				},
				isWebSocketInCurrentTab: function() {
					return i.remote("isWebSocketInCurrentTab")
				},
				disconnect: function() {
					return i.remote("disconnect")
				}
			}
		}();
	return o
}({
	host: ["tblcs", "baidu", "com"].join(".") + ":8800",
	Appid: "tieba",
	Appkey: "appkey",
	Cuid: $.cookie("BAIDUID") || "http://v.tieba.com/" || "http://dq.tieba.com"
});